Перенаправление в контроллере в MVC 3 с Razor - PullRequest
2 голосов
/ 06 июля 2011

Мне нужна небольшая помощь. Я пытаюсь сделать небольшой проект в MVC 3 с Razor. Страница с 2 кнопками: Кнопка 1 и Кнопка 2. Когда я нажимаю на кнопку 1, я хочу перейти на страницу 1. То же самое с кнопкой 2 (на страницу 2). Это не сложно, НО я хочу, чтобы перенаправление осуществлялось в контроллере, а не в представлении (cshtml). Я знаю, что мне нужно использовать ActionName и RedirectToAction, но я не знаю как. Пожалуйста, помогите мне!

Ответы [ 3 ]

1 голос
/ 06 июля 2011

Что вам нужно сделать, это проверить, какая кнопка была нажата в части HttpPost действия контроллера, а затем перенаправить соответствующим образом.

В качестве очень простого примера вы можете добавить два

<input type="submit" name="submit" value="<val>"> 

контролирует в вашем виде формы, каждый из которых имеет одно и то же имя и другое значение (вместо), затем добавляет строковый параметр с именем submit в действие HttpPost.Предполагая, что кнопки имеют значения «button1» и «button2». Тогда в коде вашего действия вы можете использовать:

if(submit == "button1") {
  RedirectToAction("Page1");
} else {
  RedirectToAction("Page2");
}

для перенаправления в зависимости от того, какая кнопка была нажата

0 голосов
/ 06 июля 2011

Это упрощенный пример, но я думаю, вы поймете мой смысл. Вам просто нужно назвать свои кнопки и проверить коллекцию форм, чтобы увидеть, что существует в коллекции, указав, на что нажали. см. код ниже:

    @using (Html.BeginForm("Test", "Home", FormMethod.Post))
    { 

        <input type="submit" value="Go 1" name="go-1" />
        <input type="submit" value="Go 2" name="go-2" />
    }

и теперь реализация Action.

    [HttpPost]
    public ActionResult Test(FormCollection collection)
    {
        if (collection.AllKeys.Contains("go-1")) return View("Page1");
        if (collection.AllKeys.Contains("go-2")) return View("Page2");
        return View("Index");
    }

и это все.

0 голосов
/ 06 июля 2011

В вашем действии контроллера для страницы 1 вы можете использовать RedirectToAction:

public ActionResult Process()
{
  // do processing

  // redirect to page 2
  return this.RedirectToAction("Index", "Page2");
}

Вы можете вызвать действие Process из кнопки Page 1, используя запрос GET или POST, в зависимости от того, является ли действие Process идемпотентным. Например, на вашей странице 1 просмотр:

@Html.BeginForm("Process", "Page1", FormMethod.Post)
{
  <input type="submit" name="button" value="Submit" />
}

В качестве альтернативы вы можете использовать ActionLink:

@Html.ActionLink("Redirect to Page 2", "Process", "Page1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...