ASP.NET MVC: возврат представления с неповрежденной строкой запроса - PullRequest
4 голосов
/ 20 мая 2010

Я создаю веб-приложение для обмена сообщениями в ASP.NET, и у меня возникают некоторые проблемы при отображении сообщения об ошибке пользователю, если он отправляет сообщение и что-то не так.

Пользователь может просматривать профили людей и затем нажимать «отправить сообщение». Следующее действие называется (url is / message / create? To = username) и показывает им страницу, где они могут ввести свое сообщение и отправить его:

public ActionResult Create(string to)
{
    ViewData["recipientUsername"] = to;

    return View();
}

На отображаемой странице имя пользователя вводится в скрытое поле ввода. Когда пользователь нажимает кнопку «отправить»:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection collection, string message)
{
    try
    {
        //do message stuff that errors out
    }
    catch
    {
        ModelState.AddModelErrors(message.GetRuleViolations()); //adding errors to modelstate
    }

    return View();
}

Таким образом, теперь сообщение об ошибке отображается пользователю в порядке, однако URL-адрес изменяется, так как в нем больше нет строки запроса (/ message / create). Опять же, это будет хорошо, за исключением того, что когда пользователь нажимает кнопку обновления, страница выдает ошибку, поскольку действие «Создать» больше не имеет параметра «to».

Так что я предполагаю, что мне нужно как-то поддерживать мою строку запроса. Есть ли способ сделать это или мне нужно использовать другой метод в целом?

Ответы [ 2 ]

3 голосов
/ 20 мая 2010

Я полагаю, вы делаете что-то вроде ...

<% Html.BeginForm("Create", "Controller") { %>

<% } %>

Когда вы создаете URL-адрес действия формы посредством маршрутизации, существующие значения маршрута будут потеряны в процессе. Самый простой способ избежать этого - просто использовать версию BeginForm без параметров, поскольку вы находитесь на странице, на которую публикуете.

<% Html.BeginForm() { %>

<% } %>

Это будет использовать текущий URL, строку запроса и все, как ДЕЙСТВИЕ формы. В противном случае вам нужно будет передать значение маршрута to в перегрузке BeginForm.

1 голос
/ 20 мая 2010

Рекомендую вам взглянуть на шаблон PRG, который поможет с этим.

http://devlicio.us/blogs/tim_barcz/archive/2008/08/22/prg-pattern-in-the-asp-net-mvc-framework.aspx

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