Когда @marcind говорит, что они скомпилированы, сами шаблоны не внедряются, а пишутся в коде.Например, EditorFor
вызывает TemplateFor
, который может вызывать TextAreaExtensions.TextArea
или одно из многих других расширений, которые генерируют код, который в конечном итоге выводится.Это может быть связано с тем, что у нас есть возможность удалить движок представления по умолчанию и использовать что-то вроде nhaml .
Отображение между именами шаблонов и функцией, создающей результирующий вывод, можно увидеть в System.Web.Mvc.Html.TemplateHelpers
.См. Также System.Web.Mvc.Html.DefaultEditorTemplates
.
. Ближайшая вещь, которая существует прямо сейчас, - это шаблоны веб-форм, существующие в 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>
<% } %>
<% } %>
<% } %>