Если у вас есть пользовательский шаблон отображения для любого данного типа данных, использование @Html.DisplayFor()
будет учитывать этот пользовательский шаблон отображения и отображать ваш код так, как вы хотели.
Использование @Model.YourField
напрямую вызовет .ToString()
в этом поле и выдает все, что возвращает этот вызов.
Попробуйте это:
Модели / IndexModel.cs :
public class IndexModel
{
public DateTime HireDate { get; set; }
}
Контроллер / HomeController.cs
public ActionResult Index()
{
IndexModel model = new IndexModel {HireDate = new DateTime(2015, 8, 15)};
return View(model);
}
Views / Home / 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>
И, наконец, пользовательский шаблон отображения:
Views / 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
напрямую
Так что это действительно вопрос того, что вы хотите / нуждаетесь - выберите тот, который наиболее соответствует вашим потребностям / требованиям!