Asp.net mvc 是否将特定表数据从视图返回控制器?asp.NETMVC

Asp.net mvc 是否将特定表数据从视图返回控制器?asp.NETMVC,asp.net-mvc,Asp.net Mvc,因此,我有一个视图,它当前显示数据库中的一个数据表,并带有一个select/selectall复选框。我想做的是能够获得我的CustomerNumber列表,以及它们是否已被检查,并将其返回给我的控制器以供进一步操作 下面是我的视图当前的编写方式。我已经尝试了无数种方法来实现这一点,但我被难倒了 @model MassInactiveInspections.Models.CustomerInfoList <div class="container"> <h2>

因此,我有一个视图,它当前显示数据库中的一个数据表,并带有一个select/selectall复选框。我想做的是能够获得我的CustomerNumber列表,以及它们是否已被检查,并将其返回给我的控制器以供进一步操作

下面是我的视图当前的编写方式。我已经尝试了无数种方法来实现这一点,但我被难倒了

@model MassInactiveInspections.Models.CustomerInfoList

<div class="container">
    <h2>@ViewBag.Title</h2>
    <div class="bs-callout bs-callout-info" style="margin-bottom: 0px;">
    </div>
    <div class="col-md-8">

            @using (Html.BeginForm("SelectedCustomers", "Home", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
            {
                @Html.AntiForgeryToken()
                <hr />
                @Html.ValidationSummary(true)
                <div class="form-group">
                    <table class="table table-bordered">
                        <tr>
                            <th class="active">@Html.DisplayName("Select All?")<input type="checkbox" class="select-all checkbox" name="select-all" /></th>
                            <th>@Html.DisplayNameFor(m => m.CustomerInfoListView.FirstOrDefault().BusinessName)</th>
                            <th>@Html.DisplayNameFor(m => m.CustomerInfoListView.FirstOrDefault().CustomerName)</th>
                            <th>@Html.DisplayNameFor(m => m.CustomerInfoListView.FirstOrDefault().CustomerNumber)</th>                              
                            <th>@Html.DisplayNameFor(m => m.CustomerInfoListView.FirstOrDefault().InspectionCycleDescription)</th>
                            <th>@Html.DisplayNameFor(m => m.CustomerInfoListView.FirstOrDefault().LastInspectionDate)</th>
                            <th>@Html.DisplayNameFor(m => m.CustomerInfoListView.FirstOrDefault().RouteCode)</th>
                            <th>@Html.DisplayNameFor(m => m.CustomerInfoListView.FirstOrDefault().RouteID)</th>
                            <th>@Html.DisplayNameFor(m => m.CustomerInfoListView.FirstOrDefault().SiteNumber)</th>
                            <th>@Html.DisplayNameFor(m => m.CustomerInfoListView.FirstOrDefault().SystemCode)</th>
                        </tr>

                        @foreach (var item in Model.CustomerInfoListView)
                        {
                            <tr>
                                <td class="active"> <input id="Selected" input type="checkbox" class="select-item checkbox" name="select-item" value="1000" /> </td>
                                <td>@Html.DisplayFor(modelItem => item.BusinessName)</td>
                                <td>@Html.DisplayFor(modelItem => item.CustomerName)</td>
                                <td>
                                    @Html.DisplayFor(modelItem => item.CustomerNumber)
                                    @Html.HiddenFor(m => m.CustomerInfoListView.FirstOrDefault().CustomerNumber)
                                </td>
                                <td>@Html.DisplayFor(modelItem => item.InspectionCycleDescription)</td>
                                <td>@Html.DisplayFor(modelItem => item.LastInspectionDate)</td>
                                <td>@Html.DisplayFor(modelItem => item.RouteCode)</td>
                                <td>@Html.DisplayFor(modelItem => item.RouteID)</td>
                                <td>@Html.DisplayFor(modelItem => item.SiteNumber)</td>
                                <td>@Html.DisplayFor(modelItem => item.SystemCode)</td>
                            </tr>
                        }
                    </table>
                </div>
                <div class="form-group">
                    <div style="margin-top: 50px">
                        <input type="submit" id="btnLost" class="btn btn-primary" value="Lost"/>
                        <input type="submit" class="btn btn-primary" name="OOBButton" value="OOB" />
                        <input type="submit" class="btn btn-primary" name="RefusedButton" value="Refused" />
                    </div>
                </div>
                }
    </div>
</div>
这里还有我的javascript用于复选框

[HttpPost]
public ActionResult SelectedCustomers(CustomerInfoList customerNumberList)
{
    return View("ViewCustomerInfo");
}


        //column checkbox select all or cancel
$("input.select-all").click(function () {
    var checked = this.checked;

    $("input.select-item").each(function (index, item) {
        item.checked = checked;
    });
});

//check selected items
$("input.select-item").click(function () {
    var checked = this.checked;
    console.log(checked);
    checkSelected();
});

//check is all selected
function checkSelected() {
    var all = $("input.select-all")[0];
    var total = $("input.select-item").length;
    var len = $("input.select-item:checked:checked").length;
    console.log("total:" + total);
    console.log("len:" + len);
    all.checked = len === total;
}
});

不确定这是否是处理它的最佳方式,但我只是简单地将我想要的字段添加到HiddenFor帮助器中,并将它们返回到相应的控制器。谢谢大家的帮助

 @Html.HiddenFor(m => m.additionalCustomerInfoListView[i].CustomerNumber)

不确定这是否是处理它的最佳方式,但我只是简单地将我想要的字段添加到HiddenFor帮助器中,并将它们返回到相应的控制器。谢谢大家的帮助

 @Html.HiddenFor(m => m.additionalCustomerInfoListView[i].CustomerNumber)

似乎您的
CustomerInfoListView
视图模型需要一个名为
Selected
的新属性,那么在
所在的位置,您可以在循环中使用
@Html.EditorFor(m=>m.CustomerInfoListView[i]
(其中
i
是该项的索引位置)。然后,当您发布到控制器时,您可以访问该数据。您不能使用
foreach
循环为集合生成表单控件-请参阅。要处理您的复选框并发回选择,请参阅。你需要一些javascript来处理你的“全选”checkbox@StephenMuecke他是否可以保留
foreach
并使用
var i=Model.CustomerInfoListView.IndexOf(项目)获取每次迭代的索引位置?@zgood,不,这不起作用。它不会为绑定生成正确的
name
属性(需要是
name=“CustomerFolistView[0]。CustomerNumber”
name=“CustomerFolistView[1]。CustomerNumber”
等。@StephenMuecke我想你误解了我的要求。请查看(只有带有
foreach
循环的剃须刀部分)。你看,我可以使用
foreach
,但仍然可以通过
@Html
剃须刀助手获得索引值来生成正确的名称。我知道这很有效,我以前成功地使用过它,我或多或少想知道它是否比使用
I++
的正常
效率低。我只是想告诉你可以使用
foreach
为集合生成控件,您只需自行管理索引值,就好像您需要在名为
Selected
视图模型上创建一个新属性,然后在
所在的位置可以使用
@Html.EditorFor(m=>m.CustomerInfoListView[i].Selected)
在循环中(其中
i
是该项的索引位置)。然后,当您发布到控制器时,您将有权访问该数据。您不能使用
foreach
循环为集合-reference生成表单控件。要处理复选框并发回选择-reference,您需要一些javascript来处理“全选”checkbox@StephenMuecke他能保留这张支票吗de>foreach
并使用
var i=Model.CustomerInfoListView.IndexOf(item);
获取每次迭代的索引位置?@zgood,不,这将不起作用。它不会为绑定生成正确的
name
属性(需要是
name=“CustomerInfoListView[0]。CustomerNumber”
name=“CustomerInfoListView[1] .CustomerNumber“
等@StephenMuecke我想你误解了我的要求。请看(只有带有
foreach
循环的剃须刀部分)。你看,我可以使用
foreach
,但仍然可以通过
@Html
剃须刀助手获得索引值来生成正确的名称。我知道这很有效,我以前成功地使用过它,我或多或少想知道它是否比使用
I++
的正常
效率低。我只是想告诉你可以使用
foreach
为集合生成控件,您只需自己管理索引值即可