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

Я использую 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.


person Matt Mitchell    schedule 12.08.2008    source источник


Ответы (3)


Решение:

public ActionResult TestAction(string paramName)
{
    if (!String.IsNullOrEmpty(Request["paramName"]))
    {
        return RedirectToAction("TestAction", new { paramName = Request["paramName"]});
    }
    /* ... */
}
person Matt Mitchell    schedule 08.09.2008
comment
@Маслоу, да! редирект 302 будет всегда - person shashwat; 07.09.2013

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

TestController.mvc/TestAction

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

person Haacked    schedule 12.08.2008

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

param1=value1&...&paramn=valuen

Это не имеет ничего общего с MVC.

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

person Haacked    schedule 28.08.2008
comment
Да, ты прав - спасибо. Размышляя об этом, я даже не уверен, о чем я думал - может быть, просто заставить приложение MVC направить на новый хороший URL-адрес после отправки формы. Более поздние атрибуты GET/POST помогают. - person Matt Mitchell; 27.02.2009