Обычно я обрабатываю свои формы с помощью @Html.RenderModel, но на этот раз у меня сложная логика обработки, и я делаю ее вручную. Я решил создать шаблон редактора для одного свойства. Вот код (копия, вставленная из реализации шаблона редактора объектов по умолчанию):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<% var modelMetadata = ViewData.ModelMetadata; %>
<% if (modelMetadata.HideSurroundingHtml) { %>
<%= Html.Editor(modelMetadata.PropertyName) %>
<% } else { %>
<% if (!String.IsNullOrEmpty(Html.Label(modelMetadata.PropertyName).ToHtmlString())) { %>
<div class="editor-label"><%= Html.Label(modelMetadata.PropertyName) %></div>
<% } %>
<div class="editor-field">
<%= Html.Editor(modelMetadata.PropertyName) %>
<%= Html.ValidationMessage(modelMetadata.PropertyName) %>
</div>
<% } %>
И вот как я его использую:
@Html.EditorFor(x => x.SomeProperty, "Property") //"Property" is template above
Но это не сработало: метки отображаются независимо от DisplayName, а редакторы вообще не отображаются (в Watches Html.Editor(modelMetadata.PropertyName показывает пустую строку). Что я делаю неправильно?