在1视图中传递同一模型的Model和IEnumerable <model>

时间:2016-04-12 15:04:47

标签: asp.net-mvc

我有一个包含2个视图的模型: Create.chtml(使用@model Model1添加新数据) Index.chtml(使用@model IEnumerable循环遍历列表以查看当前数据)。

我希望在1个视图中同时添加和列出功能。我怎么能这样做,因为我在视图中只能有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)
}