我在视图中以编辑模式显示表格中的项目列表。编辑列后,我想提交。但我无法回发列表。 List<Model>
显示为null。
答案 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>
}
我刚刚添加了一个复选框,向您展示如何保留表中的值。您可以对其进行修改以包含文本框。
我希望这会有所帮助。