0

Я использовал пользовательский маршрут маршрутизации 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.

Как отправить форму в начало/индекс?

ответ

0

Вы можете использовать <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 
    }); 
+0

Спасибо хорошо это работает, но у вас есть какие-либо идеи, почему Html.BeginForm не работает? – natrenakres

+0

@sta у вас есть два маршрута к аналогичному Action: defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional}. «alias» на первом месте вы набираете карту маршрута, поэтому Html.BeginForm принимает это как маршрут для своего действия. Но, на мой взгляд, он должен работать в любом случае. Может быть что-то неправильно в действии вашего контроллера? –

+0

работает. Однако создайте сообщение для собственного контроллера. Я ожидаю, что он отправит мой желаемый диспетчер и действия. есть ли способ изменить карту маршрутов Html.BeginForm? Могу ли я установить отличную от BeginForm? – natrenakres

 Смежные вопросы

  • Нет связанных вопросов^_^