MVC 3 Razor @model vs. Model печать свойства с использованием @ Model.pName против @ Html.LabelFor (model => model.pName) - PullRequest
2 голосов
/ 09 августа 2011

У меня есть вопрос об использовании строго типизированной модели в представлениях Razor и печати их свойств. В некоторых случаях я могу использовать

@model Namespace.Class

@Html.LabelFor(model => model.property) 

и работает нормально, но в других это не работает, но обычно это так:

@Model.property

На первый взгляд, я не уверен в разнице и почему, например, @ Html.LabelFor (model => model.property) просто выведет имя свойства, и в этом случае @ Model.property напечатает значение собственность.

Я подозреваю, что у этого есть простое объяснение, я просто не нашел правильных поисковых терминов, так что если бы вы могли предоставить краткое объяснение или ссылку, которая была бы хороша.

1 Ответ

4 голосов
/ 09 августа 2011

Html.LabelFor будет всегда попытаться напечатать имя свойства или значение метаданных свойства. Это так, что вам действительно нужно изменить метаданные в одном месте, а не обновлять все ваши представления, которые могут полагаться на это свойство.

Представьте себе, если у вас было 10 просмотров, ссылающихся на Namespace.Class.FirstName, и вы просто ввели "Имя" во все ваши просмотры. Позже вы поймете, что вам нужно поддерживать другие культуры, и теперь вам нужно заменить все ссылки «Имя» на «Имя». Если вы использовали Html.LabelFor везде, тогда вам нужно всего лишь сменить модель.

namespace Namespace {
    class Class {
        [Display(Name="Given name")]
        public string FirstName {get;set;}
    }
}

Теперь все готово, и везде, где вы указали, что свойство с Html.LabelFor будет обновляться без необходимости проходить через весь ваш код. Кроме того, это упрощает поддержку различных языков и т. Д.

...