@ model.Name和@ Html.DisplayFor(m => model.Name)之间的区别

时间:2018-11-03 07:47:29

标签: asp.net asp.net-core

我正在开发Web应用程序,这是我第一次使用asp.net mvc core 2.0。 我正在从任何教程中学习,但是到处都有使用模型打印的不同方法,我不明白为什么只有很多方法可以打印。

两种方法有什么区别?

<td>
   @item.Name
</td> 
<td>
   @Html.DisplayFor(modelItem => item.Name)
</td>

哪个更好?

1 个答案:

答案 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

因此,这实际上是您想要/需要什么的问题-选择最适合您的需求/要求的一个!