2014-01-11 44 views
1

我有一个用于模型视图ViewSetup的编辑器模板。我使用模板视图简化为使用编辑器模板枚举mvc模型的表单提交

@model IEnumerable<ViewSetup> 
@Html.EditorFor(s => s) 

我ViewSetup编辑模板有表单提交如下图所示:

using (Ajax.BeginForm("Edit", new AjaxOptions() { HttpMethod = "Post" })) 
{ 
    @Html.HiddenFor(p => p.TradingPartner.ID) 
    <input type="submit" value="Save" /> 
} 

所以基本上我需要一个形式可枚举的每个元素提交。但是我在表单提交时遇到了问题。我到后处理过程控制器:

public ActionResult Edit(ViewSetup formDataSent) 
{ 
    formDataSent.Save();  
} 

按默认模型结合我的TradingPartner财产越来越空,因为在HTML中的名称是:

<input name="[0].TradingPartner.ID" type="hidden" value="1"/> 

我需要的是只提交每个元素上的ViewSetup对象而不是数组。如果我可以删除可以为我工作的名称中的索引部分。但是我不确定如何在表单提交中获得ViewSetup对象。

回答

0

我敢打赌,如果你把你的编辑器放在一个项目而不是项目列表上,那么你将获得更多的灵活性。

@model IEnumerable<ViewSetup> 

@foreach (var item in Model) 
{ 
    @Html.EditorFor(modelItem => item.TradingPartner) 
} 
+0

不,但我有许多ViewSetup模型的属性。它比这更复杂,但我刚才简化了上面的一个属性。 – kjj

+0

也许看看使用partials。每个部分可以有一个模型,并调用其他具有子模型的部分。但是,这会增加更多的冗长度。 –

+0

我必须使用模板,因为我必须在我的应用程序的许多地方重复使用它。 是否有某种方式我可以提交表单循环中的每个元素(只有我看到的方式是没有索引获得添加到html名称)..谢谢。 – kjj

0

我有同样的问题,有什么解决这对我来说是这样的:

@foreach (var item in Model) 
{ 
    @Html.EditorFor(modelItem => item.TradingPartner, null, "") 
} 

的EditorFor的第三个属性被空白将摆脱“[0]”从你的对象。