ASP.NET MVC 不是 finding/using 自定义类型编辑器模板

ASP.NET MVC not finding/using custom type editor template

我一直在试图弄清楚为什么我的模板没有被渲染或找到(因为模板上的断点没有被击中)。我有这样的模型:

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">
}

Dropdown 对象定义所在

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 类型。

难道我不知道什么吗?

编辑: 已在城市 属性.

尝试使用 [UIHint("Dropdown")]

EDIT2: 尝试重命名为 DropdownViewModel

默认情况下,模板不会递归到嵌套的复杂对象中。如果您希望发生这种情况,您始终可以通过创建具有以下内容的 ~/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 中阅读更多关于默认模板的信息。