在mvc3中回发编辑模型列表

时间:2013-08-01 13:34:39

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我在视图中以编辑模式显示表格中的项目列表。编辑列后,我想提交。但我无法回发列表。 List<Model>显示为null。

1 个答案:

答案 0 :(得分:2)

我有一个解决方案。我还必须在表格中显示项目列表,编辑并将其发布回数据库。我不知道你的模特是什么样的,因为你没有发布任何代码所以我将使用我自己的代码。修改它以适应您的方案。

我打算把这个样本做成非常基本的。让我只在一个表中显示一个客户列表,每个名称旁边都有一个复选框,以便删除客户。

我的观点总是强烈输入。我总是将视图模型传递给我的视图。我通常使用IEnumberable,但我需要在视图中使用Count属性,因此我使用List代替。

public class CustomerViewModel
{
     public List<Customer> Customers { get; set; }
}

您的客户模型可能如下所示:

public class Customer
{
     public int Id { get; set; }

     public string FirstName { get; set; }

     public string LastName { get; set; }

     public bool IsDelete { get; set; }
}

您的控制器和操作方法可能如下所示:

public class CustomerController : Controller
{
     private readonly ICustomerRepository cusotmerRepository;

     public CustomerController(ICustomerRepository cusotmerRepository)
     {
          this.cusotmerRepository = cusotmerRepository;
     }

     public ActionResult List()
     {
          CustomerViewModel viewModel = new CustomerViewModel
          {
               Customers = customerRepository.GetAll()
          };
     }

     [HttpPost]
     public ActionResult List(CustomerViewModel viewModel)
     {
          // Debug the incoming view model and then you will see that the list is there

          // Do whatever you need to do
     }
}

所以现在你有了一个客户对象列表,剩下的就是填充表格了。

您的观点可能如下所示:

@model YourProject.ViewModels.Customers.CustomerViewModel

@using (Html.BeginForm())
{
     <table id="customers-datatable">
          <thead>
               <tr>
                    <th>First Name</th>
                    <th>Last Name</th>
                    <th>Delete</th>
               </tr>
          </thead>
          <tbody>

               @for (int i = 0; i < Model.Customers.Count(); i++)
               {
                    <tr>
                         <td>
                              @Html.DisplayFor(x => x.Customers[i].FirstName)
                              @Html.HiddenFor(x => x.Customers[i].FirstName)
                         </td>
                         <td>
                              @Html.DisplayFor(x => x.Customers[i].LastName)
                              @Html.HiddenFor(x => x.Customers[i].LastName)
                         </td>
                         <td>
                              @Html.CheckBoxFor(x => x.Customers[i].IsDelete)
                              @Html.HiddenFor(x => x.Customers[i].Id)
                         </td>
                    </tr>
               }

          </tbody>
     </table>
}

我刚刚添加了一个复选框,向您展示如何保留表中的值。您可以对其进行修改以包含文本框。

我希望这会有所帮助。