Я использовал пользовательский маршрут маршрутизации mvc. Но когда я использую Html.BeginForm или Ajax.BeginForm в представлении, параметры действия неожиданно изменяются. Мои коды вышеMVC.NET Пользовательский корневой обработчик Неправильное действие в Html: 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"))
Наконец неправильное действие в браузере выглядит это:
Форма action = "/ man-parfume" data-ajax = "true" data-ajax-method = "Post" id = "form0" method = "post"> Форма action = "/ man-parfume" метод = "post"> input type = "submit" value = "send" />
Я написал контроллер как дом в начале формы, но он изменился при визуализации Html.BeginForm.
Как отправить форму в начало/индекс?
Спасибо хорошо это работает, но у вас есть какие-либо идеи, почему Html.BeginForm не работает? – natrenakres
@sta у вас есть два маршрута к аналогичному Action: defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional}. «alias» на первом месте вы набираете карту маршрута, поэтому Html.BeginForm принимает это как маршрут для своего действия. Но, на мой взгляд, он должен работать в любом случае. Может быть что-то неправильно в действии вашего контроллера? –
работает. Однако создайте сообщение для собственного контроллера. Я ожидаю, что он отправит мой желаемый диспетчер и действия. есть ли способ изменить карту маршрутов Html.BeginForm? Могу ли я установить отличную от BeginForm? – natrenakres