我正在尝试了解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(),但只有控制器名称出现在没有两个关键字的行动?例如/接触
答案 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>