Разница между @ model.Name и @ Html.DisplayFor (m => model.Name) - PullRequest
0 голосов
/ 03 ноября 2018

Я работаю над веб-приложением, впервые использую asp.net mvc core 2.0. Я учусь на любых уроках, но везде разные подходы к печати моделей, я не могу понять, почему есть много способов просто печатать.

В чем разница между двумя подходами:

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

А какой из них лучше?

1 Ответ

0 голосов
/ 03 ноября 2018

Если у вас есть пользовательский шаблон отображения для любого данного типа данных, использование @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 напрямую

Так что это действительно вопрос того, что вы хотите / нуждаетесь - выберите тот, который наиболее соответствует вашим потребностям / требованиям!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...