绑定到具有多个等号前缀的控制器中

本文关键字:前缀 控制器 绑定 | 更新日期: 2023-09-27 17:57:00

我的项目中有一个表单(带有剃刀的MVC3 C#),这是代码的一部分(有几个提交类型的按钮):

@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 迭代,因为当我抱怨获得与按钮对应的通信时,我得到了第一个,因为前缀在迭代中是相同的。我该如何解决这个问题?

绑定到具有多个等号前缀的控制器中

我认为您以错误的方式看待您的架构 - 在我看来,您应该在表单上只有一个提交按钮,毕竟表单用于提交值。

我会重组您的控制器/视图,而不是使用多个提交按钮,我会使用链接到控制器中其他操作的操作链接,例如编辑、保存等。

迭代

邮件对象时,可以创建操作链接并将 Hash 属性用作操作参数。