Ответ 1
Решение:
public ActionResult TestAction(string paramName)
{
if (!String.IsNullOrEmpty(Request["paramName"]))
{
return RedirectToAction("TestAction", new { paramName = Request["paramName"]});
}
/* ... */
}
Я использую 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"]});
}
/* ... */
}
В своем маршруте избавиться от части {paramName} URL. Это должно быть:
TestController.mvc/TestAction
Как это URL, к которому вы хотите отправить запрос. Затем ваша форма будет размещаться на этом URL-адресе. Добавленные значения формы автоматически сопоставляются с параметрами метода действия, поэтому не беспокойтесь о том, что данные не переданы вашему методу действий.
Я понимаю, что так работает HTML. Если вы выполните <form url="foo" method="get">
и опубликуете форму, то форма будет публиковать foo?
param1=value1&...¶mn=valuen
Это не имеет ничего общего с MVC.
Кроме того, какая часть REST нарушает этот URL? Это не симпатичный URL, но по строгим определениям REST он может быть RESTful. REST не указывает, что параметры запроса должны быть в сегменте URL. И в этом случае это параметры запроса.