我想知道您对这种用于在MVC中提交复杂模型的方式的看法
例如,如果我有这样的复杂模型:
public class TOIFormDTO
{
public TradeFormDTO Trade { get; set; }
public OrderFormDTO Order { get; set; }
public ItemFormDTO Item { get; set; }
public TOIFormDTO() {
Trade = new TradeFormDTO();
Order = new OrderFormDTO();
Item = new ItemFormDTO();
}
}
然后,我将其绑定到表单中的视图:
@using (Html.BeginForm("SaveTOI", "Item", FormMethod.Post, new {id = "FormTOI" }))
{
<div id="tabs" style="width:1100px; height:500px">
<ul>
<li><a href="#tabTrade">Trade</a></li>
<li><a href="#tabOrder">Order</a></li>
<li><a href="#tabItem">Item</a></li>
</ul>
<fieldset>
<legend></legend>
<div id="tabTrade">
@Html.PartialForCustomPrefix(model => model.Trade, "~/Views/Trade/Trade.cshtml", "Trade")
</div>
<div id="tabOrder" style="display: none">
@Html.PartialForCustomPrefix(model => model.Order, "~/Views/Order/Order.cshtml", "Order")
</div>
<div id="tabItem">
@Html.PartialForCustomPrefix(model => model.Item, "~/Views/Item/Item.cshtml", "Item")
</div>
</fieldset>
</div>
}
通过这种方式添加前缀:
public static MvcHtmlString PartialForCustomPrefix<TModel, TProperty>(this HtmlHelper<TModel> helper, System.Linq.Expressions.Expression<Func<TModel, TProperty>> expression, string partialViewName, string CustomPrefix)
{
object model = ModelMetadata.FromLambdaExpression(expression, helper.ViewData).Model;
var viewData = new ViewDataDictionary(helper.ViewData)
{
TemplateInfo = new System.Web.Mvc.TemplateInfo
{
HtmlFieldPrefix = CustomPrefix
}
};
return helper.Partial(partialViewName, model, viewData);
}
这样,当提交表单时,模型被正确识别并且#39;通过行动:
public ActionResult SaveTOI(TOIFormDTO toiToSave)
{
}
你认为这是一个很好的方法,它是否可靠? 或者你认识到一些潜在的失败?