2013-02-21 3 views
2

Я пытался найти решение в течение довольно долгого времени, но безрезультатно. У меня есть форма. Я использую ASP.NET MVC4 с jQuery Mobile. Пользователь сначала направляется на следующий экран:Как сохранить данные между двумя совершенно разными представлениями в ASP.NET MVC 4?

enter image description here

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

Как только они нажмите кнопку Отправить, они будут приняты меры по:

enter image description here

Здесь они будут заполнить форму и нажмите кнопку «Создать». Список наполнителей, который вы видите на этом снимке экрана, основан на капсуле, выбранной на предыдущем экране. Таким образом, в зависимости от выбранной капсулы список наполнителей выше может варьироваться. Как сохранить значение первичного ключа Capsule, которое было выбрано на предыдущем экране, и сохранить его на следующем экране (совершенно другое представление)? Я понимаю, что я не могу использовать ViewBag, потому что ViewBag доступен только в одном представлении. По сути, я хочу, чтобы данные о форме выше, а также первичный ключ капсулы, выбранной в предыдущем представлении.

+0

Должны быть отношения либо через общий ключ, либо каким-либо другим способом. Если бы я был вами, я бы использовал 'Enumeration' для' Capsule' для хранения значений триггеров. – Komengem

+2

Майк, похоже, что вы по-прежнему находитесь в структуре веб-форм (View -> View) == (aspx page -> aspx page). Embrace think Controller -> Контроллер. Ваша нынешняя проблема - отличный пример. Независимо от того, какие данные вы отправляете, будет отправлен ваш метод действий (контроллер) и может быть легко передан в Модели для вашего следующего вида. Магия - это контроллер. Модель - это медиа. Вид - это сосуд. –

ответ

3

Вам нужно будет опубликовать значение обратно на сервер от View1, а затем передать, что обратно в View2 через метод действия контроллера: Ниже приведен фрагмент кода, который шоу происходит на сервере:

//Serve the view when the URL is requested 
    public ActionResult ViewAllItems() 
    { 
     return View(); 
    } 


//Handle the posted form from the ViewAllItems page 
[HttpPost] 
    public ActionResult ViewAllItems(int selectedItemId) 
    { 
     RedirectToAction("ViewItemDetail", new { id = selectedItemId }); 
    } 

    public ViewResult ViewItemDetail(int id) 
    { 
     var item = repo.GetItem(id); 
     return View(item); 
    } 

Здесь метод с помощью метода действия контроллера ViewAllItems получает опубликованное значение и перенаправляет метод ViewItemDetail, который затем загружает данные элемента и передает его в представление. Таким образом, представление будет передано id (вместе с полным элементом).

Это общий шаблон MVC, в котором значения передаются методам действий контроллера, а затем передаются обратно в представления.

+0

Проблема заключается в том, что при попадании в ViewAllItems я не могу сразу ее перенести RedirectToAction («ViewItemDetail») - это потому, что я жду, когда пользователь будет вводить данные в форму, ТОГДА нажмите «Создать», ТОГДА они будут направленный на ViewItemDetail. Я использую ваш пример, поэтому было бы проще следовать. –

+0

ViewAllItems - это метод HttpPost, который получает форму, которая отправляется на сервер. В классической установке MVC также были бы ViewAllItems без HttpPost, которые будут служить представлению, которое сначала запрашивается URL. Я обновил ответ, чтобы сделать это более ясным. – Judo

+0

Имеет больше смысла, спасибо! –

0

Рассмотрим этот псевдо-код, но в сущности контроллеры может выглядеть так ...

[HttpPost] 
public ActionResult FormOnePost(ModelFromFormOne modelFromFormOne) 
{ 
    var model = new ModelForFormTwo(); 
    model.Filters = IList<Filter> from database? query using id 
    model.MoreStuff etc. 
    return View("ViewTwoWithSecondForm", model); 
} 

Это удерживает от попадания на первичный ключ в пути.

+0

@ Ответ Юдо больше ортодокса. –

0

Вы можете сделать переменную величиной статической

Смежные вопросы