无法找到常见数据类型的DisplayTemplates

时间:2016-10-12 05:03:06

标签: c# asp.net-mvc asp.net-mvc-4 razor

我正在关注MVC的this YouTube教程,我对EditorFor和LabelFor HTMLHelpers有一些疑问,并在网上查找。找到this博客,详细解释。但是,在博客中,提到我们需要在Views \ Shared文件夹中包含[datatype] .cshtml文件,以便我们能够将EditorFor / LabelFor方法应用于datatype [datatype]的属性。但在我的项目中,我没有在解决方案中的任何地方看到任何String.cshtml文件。那么为什么我能够使用AccountNumber属性的EditorFor方法,该属性是数据类型String。下面的示例代码

我不应该在Views \ Shared文件夹中使用String.cshtml文件来使用这些EditorFor方法吗?

 <div class="form-group">
        @Html.LabelFor(model => model.AccountNumber, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.AccountNumber, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.AccountNumber, "", new { @class = "text-danger" })
        </div>
    </div>

1 个答案:

答案 0 :(得分:0)

作为评论中提到的Stephen Muecke onTabSelected(event: any){ console.log('Tab Title: ' + event.title); } 命名空间中有默认模板。我认为评论真的说明了一切,但我会试着澄清一下幕后发生的事情。如果您查看EditorFor的源代码,最终会找到System.Web.Mvc.Html internal static,其中包含某些默认类型的字典,而这些字典又使用TemplateHelpers。通过在文件夹DefaultEditorTemplatesShared/EditorTemplates中放置视图,您可以自行覆盖它们。因此,即使Shared/DisplayTemplates位于默认模板的字典中,您也可以通过将Boolean放在文件夹的开头来覆盖它。

来自Boolean.cshtml

TemplateHelpers

private static readonly Dictionary<string, Func<HtmlHelper, string>> _defaultEditorActions = new Dictionary<string, Func<HtmlHelper, string>>((IEqualityComparer<string>) StringComparer.OrdinalIgnoreCase) { { "HiddenInput", new Func<HtmlHelper, string>(DefaultEditorTemplates.HiddenInputTemplate) }, { "MultilineText", new Func<HtmlHelper, string>(DefaultEditorTemplates.MultilineTextTemplate) }, { "Password", new Func<HtmlHelper, string>(DefaultEditorTemplates.PasswordTemplate) }, { "Text", new Func<HtmlHelper, string>(DefaultEditorTemplates.StringTemplate) }, { "Collection", new Func<HtmlHelper, string>(DefaultEditorTemplates.CollectionTemplate) }, { "PhoneNumber", new Func<HtmlHelper, string>(DefaultEditorTemplates.PhoneNumberInputTemplate) }, { "Url", new Func<HtmlHelper, string>(DefaultEditorTemplates.UrlInputTemplate) }, { "EmailAddress", new Func<HtmlHelper, string>(DefaultEditorTemplates.EmailAddressInputTemplate) }, { "DateTime", new Func<HtmlHelper, string>(DefaultEditorTemplates.DateTimeInputTemplate) }, { "DateTime-local", new Func<HtmlHelper, string>(DefaultEditorTemplates.DateTimeLocalInputTemplate) }, { "Date", new Func<HtmlHelper, string>(DefaultEditorTemplates.DateInputTemplate) }, { "Time", new Func<HtmlHelper, string>(DefaultEditorTemplates.TimeInputTemplate) }, { typeof (Color).Name, new Func<HtmlHelper, string>(DefaultEditorTemplates.ColorInputTemplate) }, { typeof (byte).Name, new Func<HtmlHelper, string>(DefaultEditorTemplates.NumberInputTemplate) }, { typeof (sbyte).Name, new Func<HtmlHelper, string>(DefaultEditorTemplates.NumberInputTemplate) }, { typeof (int).Name, new Func<HtmlHelper, string>(DefaultEditorTemplates.NumberInputTemplate) }, { typeof (uint).Name, new Func<HtmlHelper, string>(DefaultEditorTemplates.NumberInputTemplate) }, { typeof (long).Name, new Func<HtmlHelper, string>(DefaultEditorTemplates.NumberInputTemplate) }, { typeof (ulong).Name, new Func<HtmlHelper, string>(DefaultEditorTemplates.NumberInputTemplate) }, { typeof (bool).Name, new Func<HtmlHelper, string>(DefaultEditorTemplates.BooleanTemplate) }, { typeof (Decimal).Name, new Func<HtmlHelper, string>(DefaultEditorTemplates.DecimalTemplate) }, { typeof (string).Name, new Func<HtmlHelper, string>(DefaultEditorTemplates.StringTemplate) }, { typeof (object).Name, new Func<HtmlHelper, string>(DefaultEditorTemplates.ObjectTemplate) } }; 创建DefaultEditorTemplates

Boolean

以下是Core的源代码:

https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.ViewFeatures/ViewFeatures/TemplateRenderer.cs