如果您仍想执行编辑器模板路线,还有另一种解决方案。您为每种类型创建模板,仅显示该类型的字段。然后,您创建一个帮助器,该帮助EditorFor
器将基类型名称的模板名称传递给它,并将其添加到EditorFor
对该类型的调用中。
楷模:
public class ModelA
{
public string PropA { get; set; }
}
public class ModelB : ModelA
{
public string PropB { get; set; }
}
模型A的模板:
@model MvcTest.Models.ModelA
@Html.EditorFor(m => m.PropA)
ModelB的模板:
@model MvcTest.Models.ModelB
@Html.EditorFor(m => m.PropB)
帮手:
public static MvcHtmlString EditorForDerived<TModel, TValue>(this HtmlHelper<TModel> helper
, Expression<Func<TModel, TValue>> expression)
{
var baseHtml = helper.EditorFor(expression, helper.ViewData.Model.GetType().BaseType.Name);
var derivedHtml = helper.EditorFor(expression);
return new MvcHtmlString(baseHtml.ToHtmlString() + derivedHtml.ToHtmlString());
}
看法:
@model MvcTest.Models.ModelB
@Html.EditorForDerived(m => m)
产生这个输出:
<input class="text-box single-line" id="PropA" name="PropA" type="text" value="valA" />
<input class="text-box single-line" id="PropB" name="PropB" type="text" value="valB" />