我正在使用一个模型,该模型需要流经一系列控制器和视图(沿着第一个控制器加载它)。有没有办法将模型从视图中持久保存到控制器等等?
这是我的代码。
型号:
public class ROWModel
{
#region Properties
//Request
public List<TBLRETURNABLEITEMS> TBLRETURNABLEITEMS { get; set; }
//public List<ReturnReasons> ReturnReasons { get; set; }
public int Order_No { get; set; }
public string First_Name {get; set; }
public string Last_Name {get; set; }
public string Company { get; set; }
public string Address_1 { get; set; }
public string Address_2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Postal_Code { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public string CustomerCode {get; set; }
public string TerritoryCode {get; set; }
//Post
#endregion
#region Constructor
public ROWModel()
{ }
#endregion
}
public class ReturnableItems : IComparable<ReturnableItems>
{
private int _id;
private decimal _ordered;
private decimal _shipped;
public int Id
{
get { return _id; }
set { _id = value; }
}
public decimal Ordered
{
get { return _ordered; }
set { _ordered = value; }
}
public decimal Shipped
{
get { return _shipped; }
set { _shipped = value; }
}
}
填充模型并将其发送到视图后,将使用模型显示所有内容。我认为在表单标签上坚持使用模型:
<% using (Html.BeginForm("Items", "ROW", Model))
以下是ROW控制器的帖子项目动作:
[ActionName("Items"), AcceptVerbs(HttpVerbs.Post)]
public ActionResult Items(ROWModel model, FormCollection collection)
问题是Model没有返回我最初填充它的TBLRETURNABLEITEMS列表。它保留了我填充的其他属性,但不保留列表。如何维护此模型的数据,而不必在每个控制器上重新加载它。
答案 0 :(得分:9)
我认为您可以使用TempData。
这样的事情:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult TestA()
{
MyModel model = new MyModel();
model.Something = "Test";
return View(model);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult TestA(MyModel model)
{
TempData["MyModel"] = model;
return RedirectToAction("TestB");
}
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult TestB()
{
MyModel myModel = (MyModel)TempData["MyModel"];
return View(myModel);
}
答案 1 :(得分:3)
NerdDinner第6步:ViewData和ViewModel
http://nerddinnerbook.s3.amazonaws.com/Part6.htm
答案 2 :(得分:1)
您可以使用会话来解决此类问题。 或者如果帖子是连续的,你可以使用tempdata。 如果您在Intranet网络中运行应用程序,则每次从数据库中获取都可以正常工作。
答案 3 :(得分:-1)
从视图到控制器获取模型(任何模型)非常简单。
这里的其他人已经介绍了将模型对象作为参数的部分。
您似乎缺少的是列表的绑定,它基于视图中表单元素中的名称而发生。基本上,它们必须看起来像C#列表元素作为字符串。因此,不知道列表元素的任何属性,如:
<%= Html.TextBox("model.TBLRETURNABLEITEMS[0].ItemId") %>
显然,这只是一个字符串,所以你可以在一个循环中构造它来做很多行的可返回。
答案 4 :(得分:-1)
我认为在MVC中,session是一个方便的选项,而不是使用Viewmodel返回操作的消防。