我的项目中有一个表单(MVC3 C#with razor),这是代码的一部分(有几个提交类型的按钮):
@foreach(Communication mail in Model.connectionToEdit.Comunications.Where(co => !co.Deleted && co.IdComunicationType == 4)) {
if(mail.IdComunication != 0) {
<input type="hidden" name="mailEdit.Hash" value="@mail.Hash" />
<input type="hidden" name="mailEdit.IdComunication" value = "@mail.IdComunication" />
<input type="hidden" name="mailEdit.IdComunicationType" value="4" />
<input type="email" name="mailEdit.Value" value="@mail.Value" />
<button type="submit" name="editmail" value="@mail.Hash" >edit</button>
}
else {
@Html.Partial("_communication", mail)<button type="submit" name="removemail" value="@mail.Hash">remove</button>
}
}
在我的控制器中,我有一个处理表单的动作方法:
[HttpPost]
public ActionResult ProcessEditForm(FormCollection form,
[Bind(Prefix = "mail")] Communication mail,
[Bind(Prefix = "mailEdit")] Communication mailEdit,
[Bind(Prefix = "phone")] Communication phone,
[Bind(Prefix = "location")] Location location,
[Bind(Prefix = "keyword")] Keyword keyword,
[Bind(Prefix = "tag")] Keyword tag,
[Bind(Prefix = "note")] Note note,
[Bind(Prefix = "web")] WebProfile web,
[Bind(Prefix = "connection")] Connection connection){
正如您所看到的,ProcessEditForm收到一个FormCollection,我知道 哪个按钮在视图侧以相同的形式按下,但我的问题是表单中的foreach迭代,因为当我想获得与按钮对应的通信时,我得到第一个因为,前缀是相同的在迭代中。 我该如何解决这个问题?
答案 0 :(得分:0)
我认为你是以错误的方式看待你的架构 - 在我看来,你应该在表单上只有一个提交按钮,毕竟表单是用于提交值。
我会重构您的控制器/视图,而不是使用多个提交按钮,我会使用链接到控制器中其他操作的操作链接,例如编辑,保存等。
在迭代邮件对象时,您可以创建操作链接并使用Hash属性作为操作参数。