Где я могу найти шаблон редактора Object.cshtml по умолчанию?
Мне нужно изменить шаблон редактора по умолчанию для строительных лесов, но я не нашел шаблон Object.cshtml, где я могу найти шаблон редактора шаблона Object.cshtml по умолчанию?
Ответы
Ответ 1
В следующем сообщении блога описано, как настроить шаблоны редактора: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html
В основном вам нужно добавить файл с именем Views\Shared\EditorTemplates\Object.cshtml
и поместить всю логику для отображения там объекта.
Ответ 2
Когда @marcind говорит, что они скомпилированы, сами шаблоны не встроены, а скорее написаны в коде. Например, EditorFor
вызывает TemplateFor
, который может вызывать TextAreaExtensions.TextArea
или одно из многих других расширений, которые генерируют код, который в конечном итоге выводится. Возможно, это связано с тем, что у нас есть возможность удалить механизм представления по умолчанию и использовать что-то вроде nhaml.
Отображение между именами шаблонов и функцией, создающей результирующий вывод, можно увидеть в System.Web.Mvc.Html.TemplateHelpers
. См. Также System.Web.Mvc.Html.DefaultEditorTemplates
.
Ближайшая вещь, которая существует прямо сейчас, - это шаблоны Webforms, которые существуют в Mvc3Futures, которые доступны на веб-сайте aspnet.codeplex.com. Внутри него существует папка DefaultTemplates\EditorTemplates, содержащая шаблоны.
Здесь шаблон Object.ascx:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script runat="server">
bool ShouldShow(ModelMetadata metadata) {
return metadata.ShowForEdit
&& metadata.ModelType != typeof(System.Data.EntityState)
&& !metadata.IsComplexType
&& !ViewData.TemplateInfo.Visited(metadata);
}
</script>
<% if (ViewData.TemplateInfo.TemplateDepth > 1) { %>
<% if (Model == null) { %>
<%= ViewData.ModelMetadata.NullDisplayText %>
<% } else { %>
<%= ViewData.ModelMetadata.SimpleDisplayText %>
<% } %>
<% } else { %>
<% foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => ShouldShow(pm))) { %>
<% if (prop.HideSurroundingHtml) { %>
<%= Html.Editor(prop.PropertyName) %>
<% } else { %>
<% if (!String.IsNullOrEmpty(Html.Label(prop.PropertyName).ToHtmlString())) { %>
<div class="editor-label"><%= Html.Label(prop.PropertyName) %></div>
<% } %>
<div class="editor-field"><%= Html.Editor(prop.PropertyName) %> <%= Html.ValidationMessage(prop.PropertyName, "*") %></div>
<% } %>
<% } %>
<% } %>