MVC - Как передать модель из вида в контроллер - PullRequest
4 голосов
/ 03 декабря 2009

Я работаю с моделью, которая должна проходить через серию контроллеров и представлений, управляющих ею по пути (загружается только на первый контроллер). Есть ли способ сохранить модель из представления обратно в контроллер и так далее?

Вот мой код.

Модель:

    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)

Проблема в том, что Модель не возвращает список TBLRETURNABLEITEMS, который я изначально заполнил. Он сохраняет другие свойства, которые я заполнил, но не список. Как мне сохранить данные этой модели без необходимости перезагружать их на каждом контроллере, если я захочу.

Ответы [ 5 ]

9 голосов
/ 03 декабря 2009

Я думаю, что вы можете использовать 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);
    }
3 голосов
/ 03 декабря 2009

NerdDinner Шаг 6. ViewData и ViewModel
http://nerddinnerbook.s3.amazonaws.com/Part6.htm

1 голос
/ 03 декабря 2009

Вы можете использовать сессию для такого рода проблем. или вы можете использовать tempdata, если сообщения являются последовательными. и выборка каждый раз, когда работает БД, если вы запускаете приложение в сетях Интранет.

0 голосов
/ 03 февраля 2017

Я думаю, что и в MVC сессия - это удобная опция, а не пожаротушение с возвратом к действию с помощью Viewmodel.

0 голосов
/ 03 декабря 2009

Получить модель (любую модель) из вида на контроллер довольно просто.

Другие здесь рассмотрели ту часть, где вы берете объект модели в качестве параметра.

то, что вам, похоже, не хватает, - это привязка списка, которая происходит на основе имен в элементах формы в представлении. в основном они должны выглядеть как элементы списка C # как строки. Итак, не зная каких-либо свойств ваших элементов списка, что-то вроде:

<%= Html.TextBox("model.TBLRETURNABLEITEMS[0].ItemId") %>

Очевидно, что это всего лишь строка, поэтому вы можете построить ее в цикле, чтобы получить много строк возвращаемых значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...