Post 将所选值收集到服务器操作
Post collection of selected values to server action
我有一张包含产品保修清单的表格。
每个列表项都有复选框。
如何 post 将 SelectecSources(保证)列表发送到服务器?
我必须更改该代码中的哪些内容?
WarrantyPlusViewModel 对象已post发送到服务器。它包含一个列表 SelectedSources,其中应包含选定的保修文章。
是否可以为所选列表使用复杂对象?
考虑到我必须 post 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; }
}
这样绑定真的很难。如果你想这样做,你应该 override Model Binder.
如果我在你那里,我会使用 ProductId
和一些 list 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>
}
我有一张包含产品保修清单的表格。
每个列表项都有复选框。
如何 post 将 SelectecSources(保证)列表发送到服务器?
我必须更改该代码中的哪些内容?
WarrantyPlusViewModel 对象已post发送到服务器。它包含一个列表 SelectedSources,其中应包含选定的保修文章。
是否可以为所选列表使用复杂对象?
考虑到我必须 post 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; }
}
这样绑定真的很难。如果你想这样做,你应该 override Model Binder.
如果我在你那里,我会使用 ProductId
和一些 list 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>
}