0

我被困在试图弄清楚为什么我的模板没有被呈现或找到(因为模板上的断点未被命中)。我有一个模型是这样的:ASP.NET MVC未找到/使用自定义类型编辑器模板

public class SomeModel 
{ 
    public Dropdown Cities { get; set; } 
} 

在该视图

@model Mvc.Models.SomeNamespace.SomeModel 
@{ 
    Layout = "../Shared/_Site.cshtml"; 
} 

@Html.ValidationSummary(true) 

@using (Html.BeginForm()) 
{ 
    @Html.EditorForModel() 

    <input type="submit" value="Continue"> 
} 

在下拉对象定义

public class Dropdown 
{ 
    public int SelectedValue { get; set; } 

    public IEnumerable<SelectListItem> Values { get; set; } 

    public string Placeholder { get; set; } 
} 

我下创建一个编辑模板使用下拉Views/Shared/EditorTemplates/Dropdown.cshtml

@model Mvc.ViewModels.Dropdown 

@Html.DropDownListFor(model => model.SelectedValue, Model.Values, Model.Placeholder) 

对我来说令人震惊的是,我在该路径下还有DateTime.cshtml模板,工作得很好。

除了Dropdown类型的属性,模型中的每个属性都被渲染,即使是带有自定义模板的DateTime。

我不知道什么?

编辑:在Cities属性中已经尝试使用[UIHint(“Dropdown”)]。

EDIT2:尝试过重命名为DropdownViewModel

+0

不相关,但它需要的是'@ Html.DropDownListFor(m => m.SelectedValue,Model.Values,Model.Placeholder)' - 无需创建第二个相同的'IEnumerable '从第一个 –

+0

@StephenMuecke谢谢,每一个快捷方式是赞赏:) –

+0

相关:[可重复使用的业务对象的DropDownList编辑器模板](http://stackoverflow.com/q/6744432/181087) – NightOwl888

回答

2

默认模板不下来递归到嵌套复杂的对象。如果您希望这种情况发生,你总是可以通过创建具有以下内容的~/Shared/EditorTemplates/Object.cshtml覆盖此默认行为:

@if (ViewData.TemplateInfo.TemplateDepth > 1) 
{ 
    @ViewData.ModelMetadata.SimpleDisplayText 
} 
else 
{ 
    foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !ViewData.TemplateInfo.Visited(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> 
     } 
    } 
} 

您可以在this blog post阅读更多关于ASP.NET MVC的默认模板。

+0

工程就像一个魅力,不知道默认情况下它不支持嵌套的复杂对象。 –

+0

无关的说明,因为我的示例与ValidationSummary一起使用,所以最好使用@ Html.ValidationMessage(prop.PropertyName)而不是添加第二个“*”参数以使数据注释正常工作 –

+0

嗨Darin,SimpleDisplayText尚未添加到.Net Core 2!你能否更新你的答案? –