将数据从Controller传递到MVC 3中的模型

时间:2015-12-23 06:00:05

标签: asp.net-mvc-3

有没有办法将数据从控制器传递到模型?

我的项目的场景是,它在数据库中有两个表,而在View中有两个文本框,一个文本框的数据保存到一个表,而另一个表的数据保存到另一个表,i想要在另一个View中显示两个表的数据。因此,我想将两个文本框值从控制器发送到模型,然后想要将该模型中的数据显示给视图。 有人可以帮忙,我该如何实施呢?

1 个答案:

答案 0 :(得分:1)

您需要创建一个视图模型并使用它。视图模型是特定于视图的简单POCO类。

public class CustomerInfo
{ 
  public string Name {set;get;}
  public string AddressLine {set;get;}
}

在你的GET Action中,你可以创建一个这样的对象,从2个表中读取数据并设置视图模型的属性值并发送到视图

public ActionResult View(int id)
{
   var vm = new CustomerInfo();
   var db=new YourDbContext();

   var customer=db.GetCustomer(id); // read from first table
   var address=db.GetAddress(id);   // read from second table
   vm.Name = customer.FirstName;
   vm.AdddressLine = address.AddressLine1;
   return View(vm);
}

您的视图将强烈输入此视图模型

@model CustomerInfo
<h2>@Model.Name</h2>
<h3>@Model.AddressLine1</h3>

如果您尝试将此信息保存到数据库表,您的视图中可能有一个表单

@model CustomerInfo
@using(Html.BeginForm("Edit","Home"))
{
 <label>Name</label> @Html.TextBoxFor(f=>f.Name)
 <label>Name</label> @Html.TextBoxFor(f=>f.AddressLine)
 <input type="submit" />
}

并在你的HttpPost行动中

[HttpPost]
public ActionResult Edit(CustomerInfo model)
{
   // read the values from model and save to 2 tables
   var c=new Customer { FirstName=model.Name};
   var a=new Address{ AddressLine1=model.AddressLine};

   var db=new YourDbContext();
   db.Customers.Add(c);
   db.Addresses.Add(a);
   db.SaveChanges();
   return RedirecToAction("Success");
}

如果您想保存一组商品,可以参考this answerthis