Использование механизма маршрутизации для отправки форм в ASP.NET MVC Preview 4.
-
08-06-2019 - |
Вопрос
Я использую 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&...¶mn=valuen
К MVC это не имеет никакого отношения.
Кроме того, какую часть REST нарушает этот URL?Это не симпатичный URL, но по строгому определению REST он может быть RESTful.REST не указывает, что параметры запроса должны находиться в сегменте URL.В данном случае это параметры запроса.