我在哪里可以找到默认的Object.cshtml编辑器模板?

ryu*_*ice 14 scaffolding razor asp.net-mvc-3

我需要修改脚手架的默认编辑器模板,但我还没找到Object.cshtml模板,在哪里可以找到默认的razor Object.cshtml编辑器模板?

mar*_*ind 8

以下博客文章介绍了如何自定义编辑器模板:http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

基本上你必须添加一个名为的文件Views\Shared\EditorTemplates\Object.cshtml,并将所有用于显示对象的逻辑放在那里.

  • "原始"模板实际上是在System.Web.Mvc.dll中进行硬编码的,因此没有可以查看的asxc或cshtml文件.使这些默认模板更可用是MVC 4列表中的内容,但我无法承诺任何事情. (7认同)

Kal*_*son 6

当@marcind说它们被编译时,模板本身不是嵌入的,而是用代码编写的.例如,EditorFor呼叫TemplateFor可以调用TextAreaExtensions.TextArea或产生最终输出的代码许多其他扩展之一.这可能是因为我们可以选择删除默认视图引擎并使用类似nhaml的东西.

可以在中看到模板名称和创建结果输出的函数之间的映射System.Web.Mvc.Html.TemplateHelpers.另见System.Web.Mvc.Html.DefaultEditorTemplates.

现在最接近的是存在于Mvc3Futures中的Webforms模板,可以在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>
        <% } %>
    <% } %>
<% } %>
Run Code Online (Sandbox Code Playgroud)