Пользовательский корневой обработчик MVC.NET Неправильное действие в HTML:BeginForm
Я использовал пользовательский обработчик маршрута MVC. Но когда я использую Html.BeginForm или Ajax.BeginForm в представлении, параметры действия неожиданно меняются. Мои коды выше
Мой метод регистрации маршрута:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("alias",
"{alias}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
).RouteHandler = new FriendlyUrlRoutehandler();
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new {controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults
);
}
Мой MvcRouteHandler это:
public class FriendlyUrlRoutehandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var friendlyUrl = (string)requestContext.RouteData.Values["alias"];
if (friendlyUrl != null)
{
if (friendlyUrl.Equals("man-parfume"))
{
requestContext.RouteData.Values["controller"] = "ManParfume";
requestContext.RouteData.Values["action"] = "Index";
}
else if (friendlyUrl.Equals("ring"))
{
requestContext.RouteData.Values["controller"] = "Ring";
requestContext.RouteData.Values["action"] = "Index";
}
else if (friendlyUrl.Equals("glases"))
{
requestContext.RouteData.Values["controller"] = "Categories";
requestContext.RouteData.Values["action"] = "Index";
requestContext.RouteData.Values["id"] = 10;
}
}
return base.GetHttpHandler(requestContext);
}
}
Мой взгляд это:
@using (Ajax.BeginForm("Index", "Home", new AjaxOptions { HttpMethod = "Post" }))
@using (Html.BeginForm("Index", "Home"))
Наконец, неправильное действие в браузере выглядит так:
form action = "/ man-parfume" data-ajax = "true" data-ajax-method = "Post" id = "form0" method = "post"> form action = "/ man-parfume" method = "post" > input type = "submit" value = "send" />
Я написал контроллер как дом в начальной форме, но он изменился, когда рендерился Html.BeginForm.
Как я могу опубликовать форму в Home/Index?
1 ответ
Вы можете использовать <form action="@Url.RouteUrl("Default", new { controller="Home", action="Index"}" method="post">
вместо Html.BeginForm
,
Относительно Ajax.BeginForm
это может быть изменено в функции jQuery:
$.ajax({
type: "POST",
url: "@Url.RouteUrl("Default", new { controller="Home", action="Index"}",
data: data,
success: success,
dataType: dataType
});