我有一个包含2个视图的模型: Create.chtml(使用@model Model1添加新数据) Index.chtml(使用@model IEnumerable循环遍历列表以查看当前数据)。
我希望在1个视图中同时添加和列出功能。我怎么能这样做,因为我在视图中只能有1个模型语句?此外,这不是两个不同的型号,它是相同的。
感谢。
答案 0 :(得分:1)
您可以创建一个新视图模型,其中包含列表属性和添加新项目
public class CustomerListViewModel
{
public List<Customer> CustomerList { set;get;} // For showing the existing list
// The below properties are for adding new customer
public string NewCustomerName { set;get;}
public string NewCustomerEmail { set;get;}
}
public class Customer
{
public string Name { set;get;}
}
现在在你的GET操作中,创建一个这个对象,加载CustomerList属性并将其发送到视图
public ActionResult Index()
{
var vm = new CustomerListViewModel();
//Hard coding 2 customers for demo. you may replace with data from db
vm.CustomerList= new List<Customer> {
new Customer { CustomerName ="Scott"},
new Customer { CustomerName ="John"},
};
return View(vm);
}
现在,您的视图将强烈输入此新视图模型
@model CustomerListViewModel
<h2>Existing customers</h2>
@foreach(var c in Model.CustomerList)
{
<p>@c.Name</p>
}
<h3>Add new customer</h3>
@using(Html.BeginForm("Add","Customer"))
{
@Html.LabelFor(s=>s.NewCustomerName)
@Html.TextBoxFor(s=>s.NewCustomerName)
@Html.LabelFor(s=>s.NewCustomerEmail)
@Html.TextBoxFor(s=>s.NewCustomerEmail)
<input type="submit" />
}
在Add HttpPost操作中,您可以使用与参数
相同的视图模型[HttpPost]
public ActionResult Add(CustomerListViewModel model)
{
var name = model.NewCustomerName;
var email = model.NewCustomerEmail;
// Save this
// to do :Return something (Redirect to success page)
}