-2

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

4

1 回答 1

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>
}

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

我希望这有帮助。

于 2013-08-02T06:09:31.010 回答