2013-04-19 2 views
0

Компоновка этого приложения ASP.NET MVC выглядит следующим образом (это мобильный веб-приложение):То же действие Вызывается неожиданно

  1. Page 1 является вопрос 1 -> Отправить форму и возврат Page 2 Посмотреть
  2. Page 2 является вопрос 2 -> Отправить форму и вернуться стр.3 Посмотреть
  3. Page 3 - последний вопрос -> Отправить до полной обработки

После того, как каждая из форм отправит, я ожидаю, что представление следующей страницы появится и отправит соответствующим образом. Но то, что на самом деле происходит на Page 1, когда я нажимаю кнопку отправки, он показываетPage 2 в вид, но теперь, когда я нахожусь на Page 2 и я ударил представить на этой странице, он называет Действие Страница 1'sHttpPost.

Что бы вызвать Page 2-х представить называть страниц 1HttpPost Action?

Вот основная идея о том, что я делаю:

public ActionResult Index() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult Index(MyModel myModel) 
{ 
    return View("Page2", myModel); 
} 

[HttpPost] 
public ActionResult Page2(MyModel myModel) 
{ 
    return View("Page3", myModel); 
} 

[HttpPost] 
public ActionResult Page3(MyModel myModel) 
{ 
    if (ModelState.IsValid) 
    { 
     // do something and complete 
    } 

    return RedirectToAction("Index", "Home"); 
} 

Это, очевидно, упрощенно, но вы должны получить идею. Просмотр Page2 невозможен. Но на этой странице, когда нажата кнопка отправки, она вернется к HttpPost из Index().

Любые идеи?

+0

какая форма URL-адрес действия создается на странице2? –

+0

Контроллеры, вероятно, имеют меньше общего с тем, что вы описываете, чем тем, как вы их называете. Возможно, вы можете описать, как вы называете свои методы? –

ответ

1

Причина, по которой это происходит, заключается в том, что при использовании HTML-помощника mvc выполняется действие рендеринга, а не действие, равное имени представления, но вы можете исправить его!

Два варианта:

Первый: Установите значения для контроллера и действия в HTML-хелперов:

@BeginForm("Page3", "controllerName") 

Второй: перенаправление на действие вместо возврата вид:

[HttpPost] 
public ActionResult Index(MyModel myModel) 
{ 
    return RedirectToAction("Page2", myModel); 
} 

[HttpPost] 
public ActionResult Page2(MyModel myModel) 
{ 
    return RedirectToAction("Page3", myModel); 
} 
+0

Отлично! Первый вариант - именно то, что я искал. Полный контроль с моей стороны. Благодаря!!!! –