MVC - 如何将模型从视图传递到控制器

时间:2009-12-03 19:04:30

标签: asp.net-mvc model-view-controller

我正在使用一个模型,该模型需要流经一系列控制器和视图(沿着第一个控制器加载它)。有没有办法将模型从视图中持久保存到控制器等等?

这是我的代码。

型号:

    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列表。它保留了我填充的其他属性,但不保留列表。如何维护此模型的数据,而不必在每个控制器上重新加载它。

5 个答案:

答案 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返回操作的消防。

相关问题