将所选值的集合发布到服务器操作

时间:2015-03-16 14:54:49

标签: asp.net-mvc asp.net-mvc-5.2

我有一张带有产品保修清单的表格。

每个列表项都有复选框。

如何将SelectecSources(保修单)列表发布到服务器?

我必须在该代码中更改哪些内容?

WarrantyPlusViewModel对象已发布到服务器。它包含一个SelectedSources列表,其中应包含所选的保修条款。

是否可以将复杂对象用于所选列表?

考虑我必须将WarrantyPlusViewModel发布到包含

的服务器

具有所选保修对象的SelectedSources属性。

@model WarrantyPlusViewModel

<div class="row">
     <div class="col-md-10 col-md-offset-1">

        @using (...)
        {
            <table class="table table-striped">
                <tr>
                    <th></th>
                    <th>@Html.DisplayFor(m => m.ProductSelected.Name)</th>
                    <th>@Html.DisplayFor(m => m.ProductSelected.Description,l)</th>
                    <th>@Html.DisplayFor(m => m.ProductSelected.Price)</th>
                </tr>
                @foreach (var product in Model.ProductList)
                {
                    <tr>
                        <td><input type="checkbox" name="SelectedSources" value="@product" /></td>

                        <td>@product.Name</td>
                        <td>@product.Description</td>
                        <td>@product.Price</td>
                    </tr>
                }
            </table>
            <input type="submit" value="Save" />
            @Html.HiddenFor(p => p.SerialNumber)
        }

    </div>

[HttpPost]
public virtual async Task<ActionResult> Save(WarrantyPlusViewModel viewModel)
{ 
   return View(MVC.WarrantyPlus.WarrantyPlus.Views.OverviewWarrentyPlus, viewModel);
}

 public class WarrantyPlusViewModel
    {

        // other properties

        public List<WarrantyPlusProductViewModel> ProductList { get; set; }

        public IEnumerable<WarrantyPlusProductViewModel> SelectedSources { get; set; }
    }

1 个答案:

答案 0 :(得分:0)

以这种方式绑定真的很难。如果你想这样做,你应该override Model Binder

如果我在你的位置,我会使用ProductIdlist binding知道并提出这个解决方案:

@for (var i = 0; i < Model.ProductList.Count(); i++)
{
    <tr>
        <td><input type="checkbox" name="ProductList[" @i "].Id" value="@Model.ProductList[i].Id" /></td>

        <td>@Model.ProductList[i].Name</td>
        <td>@Model.ProductList[i].Description</td>
        <td>@Model.ProductList[i].Price</td>
    </tr>
}