Forms MVC.NET自定义根处理程序在Html:BeginForm中的错误操作
我使用自定义mvc路由处理程序。但是,当我在视图中使用Html.BeginForm或Ajax.BeginForm时,操作参数会意外更改。我的密码在上面 我的注册路径方法是:Forms MVC.NET自定义根处理程序在Html:BeginForm中的错误操作,forms,asp.net-mvc-4,custom-routes,html.beginform,mvcroutehandler,Forms,Asp.net Mvc 4,Custom Routes,Html.beginform,Mvcroutehandler,我使用自定义mvc路由处理程序。但是,当我在视图中使用Html.BeginForm或Ajax.BeginForm时,操作参数会意外更改。我的密码在上面 我的注册路径方法是: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute("alias",
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”>
表单操作=“/man parfume”method=“post”>输入type=“submit”value=“send”/
我以begin形式将控制器编写为home,但在呈现Html.begin时它发生了变化
如何将表单发布到主页/索引?您可以使用
而不是Html.BeginForm
至于Ajax.BeginForm
,可以在jQuery函数上更改:
$.ajax({
type: "POST",
url: "@Url.RouteUrl("Default", new { controller="Home", action="Index"}",
data: data,
success: success,
dataType: dataType
});
谢谢,可以了,但你知道Html.BeginForm为什么不起作用吗?@sta你有两个类似操作的路径:默认值:new{controller=“Home”,Action=“Index”,id=UrlParameter.Optional}。在路线图中,“别名”排在第一位,因此Html.BeginForm将其作为其操作的路线。但在我看来,它无论如何都应该起作用。您的控制器操作可能有问题?它正在工作。但是,从post到自己的控制器。我的期望,它张贴到我希望的控制器和行动。有没有办法更改Html.BeginForm的路线图?我可以设置不同于所选的参数吗?