我正在开发Web应用程序,这是我第一次使用asp.net mvc core 2.0。 我正在从任何教程中学习,但是到处都有使用模型打印的不同方法,我不明白为什么只有很多方法可以打印。
两种方法有什么区别?
<td>
@item.Name
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
哪个更好?
答案 0 :(得分:5)
如果您具有任何给定数据类型的自定义显示模板,则使用@Html.DisplayFor()
将尊重该自定义显示模板并根据需要呈现代码。
直接使用@Model.YourField
只需在该字段上调用.ToString()
并输出任何返回的调用即可。
尝试一下:
Models / IndexModel.cs :
public class IndexModel
{
public DateTime HireDate { get; set; }
}
Controller / HomeController.cs :
public ActionResult Index()
{
IndexModel model = new IndexModel {HireDate = new DateTime(2015, 8, 15)};
return View(model);
}
视图/主页/Index.cshtml:
<div class="row">
<div class="col-md-6 col-md-offset-2">
Output directly: @Model.HireDate
<br/><br/>
Output via DisplayFor: @Html.DisplayFor(m => m.HireDate)
</div>
</div>
最后是自定义显示模板:
视图/DisplayTemplates/DateTime.cshtml:
@{
<span class="datetime">@Model.ToString("MMM dd, yyyy / HH:mm")</span>
}
您的输出现在将是:
Output directly: 15.08.2015 00:00:00 // Output from Model.HireDate.ToString();
Output via DisplayFor: Aug 15, 2015 . 00:00 // Output as defined in your custom display template
哪个更好现在实际上取决于您要执行的操作:
通常,我更喜欢使用@Html.DisplayFor()
,因为通常,如果遇到定义自定义显示模板的麻烦,我可能也想使用它
,但是如果您只需要“原始”输出,而无需自定义呈现,则始终可以直接直接使用@model.YourField
因此,这实际上是您想要/需要什么的问题-选择最适合您的需求/要求的一个!