使用Grid.Mvc发布所有选定的行

时间:2015-04-09 16:54:11

标签: c# asp.net-mvc

我已成功为我的应用程序实施了一个新的索引视图,它将所有未完成的电子邮件呈现给gridview,其中每行都有一个复选框。

我现在的目的是发送一封电子邮件,其中包含选定给指定收件人的每条记录的详细信息。

一旦选择了记录并为该记录邮寄了详细信息,我会将该行标记为“电子邮件”,并在将列表传递给视图之前过滤掉控制器中所有已发送电子邮件的行。

我有点困惑的是如何让我的提交按钮捕获所有已检查的选定记录,并将整个页面发回我的控制器,我可以在那里处理我的电子邮件相关内容。

这是我到目前为止所做的,我认为我没有正确地将提交按钮连接到gridview:

@using GridMvc.Html

@Html.Grid(Model).Columns(columns =>
           {
               columns.Add()
                .Encoded(false)
                .Sanitized(false)
                .Titled("Send Email?")
                .SetWidth(30)                
                .RenderValueAs(o => Html.CheckBox("checked", false));

               columns.Add(a => a.Id).Titled("Id").SetWidth(110);

               columns.Add(a => a.AddressLineOneOld).Titled("Old Address")
                   .RenderValueAs(a => a.AddressLineOneOld + " " +
                                  a.AddressLineTwoOld + " " + 
                                  a.AddressLineThreeOld + " " +                                  
                                  a.AddressLineFiveOld);

               columns.Add(a => a.PostcodeOld).Titled("Old Postcode").Sortable(true);

               columns.Add(a => a.AddressLineOneNew).Titled("New Address")
                   .RenderValueAs(a => a.AddressLineOneNew + " " +
                                  a.AddressLineTwoNew + " " +
                                  a.AddressLineThreeNew + " " +                                  
                                  a.AddressLineFiveNew);

               columns.Add(a => a.PostcodeNew).Titled("New Postcode").Sortable(true);
               columns.Add(a => a.Emailed).Sortable(true);

           }).WithPaging(20)

<br />

<div style="float:right;">
@using (Html.BeginForm("Index", "EmailManager", FormMethod.Post, new { name = "frm", id = "frm" }))
{
        <input id="btnSendEmailForSelected" type="submit" name="submitButton" value="Email Selected" class="btn btn-default" />
}
</div>

如何将所有选定的行发布回控制器?

1 个答案:

答案 0 :(得分:3)

此行Html.CheckBox("checked", false)添加一个唯一名称,将复选框的值添加到Id或您拥有的唯一键中,如下所示

Html.CheckBox("checked", false, new {name = "selectedAddressesIds", value = "UNIQUE_KEY_HERE"})

并在动作方法中尝试以下操作,您必须编写动作方法以使FormCollection

var selectedIds = form.GetValues("selectedAddressesIds");
if (selectedIds != null)
{
    foreach (var id in selectedIds)
    {
      // do what you want with the selected id.
    }
}