Использование механизма маршрутизации для отправки форм в ASP.NET MVC Preview 4.

StackOverflow https://stackoverflow.com/questions/8485

Вопрос

Я использую ASP.NET MVC Preview 4 и хотел бы знать, как использовать механизм маршрутизации для отправки форм.

Например, у меня есть такой маршрут:

routes.MapRoute(
            "TestController-TestAction",
            "TestController.mvc/TestAction/{paramName}",
            new { controller = "TestController", action = "TestAction", id = "TestTopic" }
            );

И объявление формы выглядит следующим образом:

<% using (Html.Form("TestController", "TestAction", FormMethod.Get))
   { %>
     <input type="text" name="paramName" />
     <input type="submit" />
<% } %>

что означает:

<form method="get" action="/TestController.mvc/TestAction">
  <input type="text" name="paramName" />
  <input type="submit" />
</form>

Результирующий URL-адрес отправки формы:

localhost/TestController.mvc/TestAction?paramName=value

Есть ли способ использовать этот маршрут отправки формы на желаемый URL-адрес:

localhost/TestController.mvc/TestAction/value

Единственное решение, которое я могу придумать, — это создать отдельное действие, которое просто проверяет параметры запроса, или использовать Javascript.

Это было полезно?

Решение

Решение:

public ActionResult TestAction(string paramName)
{
    if (!String.IsNullOrEmpty(Request["paramName"]))
    {
        return RedirectToAction("TestAction", new { paramName = Request["paramName"]});
    }
    /* ... */
}

Другие советы

В своем маршруте избавьтесь от части URL-адреса {paramName}.Должен быть:

Тестконтроллер.mvc/TestAction

Поскольку это URL-адрес, на который вы хотите направить запрос.Ваша форма будет опубликована на этот URL-адрес.Значения опубликованной формы автоматически сопоставляются с параметрами метода действия, поэтому не беспокойтесь о том, что эти данные не будут переданы в ваш метод действия.

Насколько я понимаю, именно так работает HTML.Если вы сделаете <form url="foo" method="get"> и опубликуйте форму, тогда форма опубликует foo?

param1=value1&...&paramn=valuen

К MVC это не имеет никакого отношения.

Кроме того, какую часть REST нарушает этот URL?Это не симпатичный URL, но по строгому определению REST он может быть RESTful.REST не указывает, что параметры запроса должны находиться в сегменте URL.В данном случае это параметры запроса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top