2015-03-16 3 views
0

У меня есть форма с гарантийным списком продукта.Почтовый сбор выбранных значений действию сервера

У каждого элемента списка есть флажок.

Как я могу опубликовать список 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; } 
    } 

ответ

0

Это действительно сложно связать. Если вы хотите это сделать, вы должны 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> 
} 
+0

Я просто нашел эту статью: http://www.codeproject.com/Articles/706728/ASP-NET-MVC-Display-a-HTML-Table-with-Checkboxes Я надеюсь, что это сработает, но, быстро прочитав статью, кажется, что я предлагаю то, что мне нужно, что вы думаете? – Elisabeth

+0

Я решил его с помощью @foreach и и вид на стороне сервераModel: public int [] SelectedIds {get; задавать; } – Elisabeth