【问题标题】:Passing data from Controller to model in MVC 3在 MVC 3 中将数据从控制器传递到模型
【发布时间】:2015-12-23 06:00:05
【问题描述】:

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

我的项目的场景是,它在数据库中有两个表,在视图中有两个文本框,一个文本框的数据保存到一个表中,而另一个表的数据保存到另一个表中,我想在另一个视图中显示两个表的数据。出于这个原因,我想将两个文本框值从控制器发送到模型,然后想将数据从该模型显示到视图。 有人可以帮助我如何实现它吗?

【问题讨论】:

标签: asp.net-mvc-3


【解决方案1】:

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

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

在您的 GET 操作中,您可以创建一个 this 对象,从 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>

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

@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    相关资源
    最近更新 更多