class A {}
class B : A {}
我有一个A
的模板,可以像这样使用......
EditorFor(m => m.MyA)
A
也可以是B
,因此在A
的模板中我想要输出额外的B
字段,如果绑定的项目是B
1}}。
所以在我的A
模板中:
@{
Html.EditorFor(i => i as B);
}
...给出
模板只能用于字段访问,属性访问, 单维数组索引或单参数自定义索引器 表达式。
我尝试使用以下输出字段除了表单元素名称之外没有父元素的前缀。
@{
Html.RenderPartial("~/Views/B.cshtml", Model as B, new ViewDataDictionary());
}
答案 0 :(得分:2)
如果您仍想要编辑模板路线,还有另一种解决方案。您可以为每种类型创建模板,仅显示该类型的字段。然后创建一个调用EditorFor
的帮助器,向其传递一个基本类型名称的模板名称,并将其添加到此类型的EditorFor
调用中。
型号:
public class ModelA
{
public string PropA { get; set; }
}
public class ModelB : ModelA
{
public string PropB { get; set; }
}
ModelA 的模板:
@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" />
答案 1 :(得分:1)
这有效......
@Html.Partial("~/Views/B.cshtml", Model as B, new ViewDataDictionary(ViewData)
{
Model = Model as B
});