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



我已经成功地将一个新的索引视图嵌入到我的应用程序,将所有未完成的电子邮件呈现到网格视图,该网格视图具有每行的复选框。

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

选择记录并邮寄该记录的详细信息后,我会将该行标记为"已通过电子邮件发送",并在将列表传递到视图之前在控制器中筛选出所有通过电子邮件发送的行。

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

这是我到目前为止所拥有的,我认为我没有将提交按钮正确连接到网格视图:

@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>

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

此行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.
    }
}

最新更新