MVC6引入了标记帮助器,这是一种比使用@Html.EditorFor更好的方法,等等。但是我还没有发现任何标记助手可以替代@Html.DisplayFor。
当然,我可以直接在Razor页面上使用变量,比如@Model.BookingCode。但这不允许控制格式设置。
对于MVC6,在概念上显示模型属性值的正确方法是什么?
发布于 2016-01-29 11:40:36
您可以创建自己的标记助手。
namespace MyDemo.TagHelpers
{
[HtmlTargetElement("p", Attributes = ForAttributeName)]
public class DisplayForTagHelper : TagHelper
{
private const string ForAttributeName = "asp-for";
[HtmlAttributeName(ForAttributeName)]
public ModelExpression For { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (output == null)
{
throw new ArgumentNullException(nameof(output));
}
var text = For.ModelExplorer.GetSimpleDisplayText();
output.Content.SetContent(text);
}
}
}
添加在视图中使用它:
<p asp-for="MyProperty" class="form-control-static"></p>
发布于 2015-09-19 19:00:09
@Html.DisplayFor仍然存在并且仍然可以使用。
HtmlHelpers和TagHelpers的区别在于,HtmlHelpers为您选择要呈现哪些html元素,而TagHelpers则使用您自己添加的html标记,因此您可以更完全地控制使用什么html元素。您确实可以通过HtmlHelpers使用模板来控制标记,但是您可以更多地控制TagHelpers。
因此,您应该考虑如何使用html标记,我希望将这个模型属性封装在其中,并使用@Model.Property将属性周围的标记添加到属性周围,或者继续使用DisplayFor,如果您希望由助手来决定的话。
发布于 2018-12-09 19:52:52
try below code
public class movie
{
public int ID { get; set; }
[DisplayName("Movie Title")]
public string Title { get; set; }
}
///////////////////////////////////////////////////
@model IEnumerable<MvcMovie.Models.Movie>
<h1>Show List Movies</h1>
<label asp-for="ToList()[0].Title">< /label>
@foreach (var movie in Model)
{
@movie.Title
}
https://stackoverflow.com/questions/32671644
复制相似问题