ASP.NET URL重写Html.BeginForm控制器

时间:2013-02-04 21:21:35

标签: asp.net-mvc asp.net-mvc-4

我正在尝试了解RouteConfig设置中的行为。这就是我所拥有的:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "2KeywordController",
            url: "{keyword1}-{keyword2}-{controller}/{action}",
            defaults: new { action = "Index" }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}",
            defaults: new { controller = "Home", action = "Index" }
        );
    }
}

我有一个名为ContactController的控制器和/Views/Contact/Index.cshtml下的一个View,它有以下内容来创建表单:

@using (Html.BeginForm("Index", "contact", FormMethod.Post, new { id = "contactform" }))

当我导航到example.com/kw1-kw2-contact时,正确调用了ContactController并显示了默认的联系人视图。当我查看源代码时,我惊讶地发现表单的操作设置为“/ kw1-kw2-contact”而不仅仅是“/ contact”。有没有办法使用Html.Begin(),但只有控制器名称出现在没有两个关键字的行动?例如/接触

1 个答案:

答案 0 :(得分:3)

  

有没有办法使用Html.Begin()但只有控制器名称   在没有这两个关键字的情况下出现?

当然,您可以使用BeginRouteForm代替BeginForm并指定您要使用的路线名称:

@using (Html.BeginRouteForm(
    routeName: "Default", 
    routeValues: new { action = "index", controller = "contact" }, 
    method: FormMethod.Post, 
    htmlAttributes: new { id = "contactform" })
)
{
    ...
}

会发出:

<form action="/contact" id="contactform" method="post">
    ...
</form>