有没有办法将数据从控制器传递到模型?
我的项目的场景是,它在数据库中有两个表,而在View中有两个文本框,一个文本框的数据保存到一个表,而另一个表的数据保存到另一个表,i想要在另一个View中显示两个表的数据。因此,我想将两个文本框值从控制器发送到模型,然后想要将该模型中的数据显示给视图。 有人可以帮忙,我该如何实施呢?
答案 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 answer或this。