我使用了自定义 mvc 路由处理程序。但是当我在视图中使用 Html.BeginForm 或 Ajax.BeginForm 时,Action 参数会意外更改。我的代码在上面
我的注册路线方法是:
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" > 输入类型="提交" 值="发送" />
我以开始形式将控制器编写为主页,但在呈现 Html.BeginForm 时它发生了变化。
如何将表格发布到主页/索引?