我有一个这样的模型:
public class MyModel {
[ScaffoldColumn(false)]
public int CharityId { get; set; }
[UIHint("Charities")]
public SelectList Charities { get; set; }
}
然后我有一个名为Charities.cshtml的EditorTemplate:
@model MyModel
@Html.DropDownListFor(model => model.CharityId, Model.Charities)
然后在我的页面中:
@model MyModel
@Html.EditorForModel()
然而,无论如何,它都不会呈现慈善机构模板。我一直在抨击我的大脑,它应该有效......但事实并非如此。
有什么想法吗?
编辑:
问题是默认的Object模板不会渲染除自身之外的复杂对象(所谓的浅潜),即使有UIHint也是如此。我的印象是UIHint会让它渲染模板,但我显然是错的。
修复是不要试图让模型自我渲染。这很难过。
答案 0 :(得分:5)
页面中的第一件事@EditoFormodel()
看起来很奇怪。我想你的意思是别的。
现在要点:您已使用Charities
修饰了UIHint
属性。此属性的类型为SelectList
。这意味着Charities.cshtml
模板应该强烈输入SelectList
,而不是MyModel
。您只需删除此UIHint属性并具有以下视图模型:
public class MyModel {
[ScaffoldColumn(false)]
public int CharityId { get; set; }
public SelectList Charities { get; set; }
}
并在您看来:
@model MyModel
@Html.EditorForModel()
然后在~/Views/Shared/EditorTemplates/MyModel.cshtml
内有:
@model MyModel
@Html.DropDownListFor(model => model.CharityId, Model.Charities)
这是标准惯例。如果您希望调用您的编辑器模板Charities.cshtml
,可以在页面中执行此操作:
@model MyModel
@Html.EditorForModel("Charities")
但通常你会有以下型号:
public class FooViewModel
{
[UIHint("Charities")]
public MyModel Charities { get; set; }
}
现在,如果主视图强烈输入FooViewModel
,您可以:
@model FooViewModel
@Html.EditorFor(x => x.Charities)
将呈现Charities.cshtml
编辑器模板。