我在视图中以编辑模式显示表格中的项目列表。编辑列后,我想提交。但我无法回发列表。List<Model>
显示为空。
问问题
740 次
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 回答