对于 3 个不同的控制器,我的观点或多或少完全相同。唯一的区别是他们在哪里张贴表格。所有这些控制器都派生自同一个基类,并且视图包含一个表单,该表单将发布到该基类中的一个操作。
我的观点目前看起来像这样:
@model Models.Forms.ContactPersonForm
@{
Layout = null;
}
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">Edit contact person</h4>
</div>
@using (Html.BeginForm<ProductsController>(x => x.EditContactPerson(null), FormMethod.Post))
{
<div class="modal-body">
@Html.EditorForModel()
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">
<span class="fa fa-times" area-hidden="true"></span> Close
</button>
<button type="submit" class="btn btn-primary">
<span class="fa fa-floppy-o" area-hidden="true"></span> Save
</button>
</div>
}
上面的视图工作正常。但我想将它重用于另一个也继承相同基本控制器(并发布到EditContactPerson
操作)的控制器。因此,我想在模型中指定要发布到哪个控制器。我知道我可以这样使用字符串重载:
@Html.BeginForm("EditContactPerson", "Products", FormMethod.Post)
或者
@Html.BeginForm(Model.Action, Model.Controller, FormMethod.Post)
但我真的想改用表达式,如下所示:
@Html.BeginForm<ProductsController>(x => x.EditContactPerson(null), FormMethod.Post)
有没有办法可以使用模型使用模型中的表达式来呈现表单?
类似于:
@Html.BeginForm<Model.ControllerType>(Model.ActionExpression, FormMethod.Post)