我将默认路由定义为
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
我想在html中生成这样的网址 -
<form action="/app/Request/c35d4520-ba0b-452f-837b-a00046f40647 method="post">
但如果我将Razor页面编码为 -
@using (Html.BeginForm("Default", "Request", FormMethod.Post, new { id = ViewBag.AppId }))
渲染的html是 -
<form action="/app/Request" id="c35d4520-ba0b-452f-837b-a00046f40647" method="post">
如何强制剃刀生成url作为控制器/动作/ ID格式?
由于
答案 0 :(得分:0)
@using (Html.BeginRouteForm("Default", new { controller = "foo", action = "bar" }, FormMethod.Post, new { id="foo", enctype="multipart/form-data", accept_charset="utf-8" }))
{
}
答案 1 :(得分:0)
问题在于您在Html.BeginForm
调用中排列参数的方式。根据您输入的参数,您当前正在调用
Html.BeginForm(actionName, controllerName, formMethod, htmlAttributes)
因此,new { id = ViewBag.AppId }
被视为htmlAttributes。这就是id
被重新作为form标签中的属性的原因。
相反,你应该交换方法和id的位置,如下所示
Html.BeginForm("Default", "Request", new { id = ViewBag.AppId }, FormMethod.Post))
让我知道它是否适合你:)
答案 2 :(得分:0)
问题已由函数解决 -
protected ActionResult RedirectToAppAction(string controllerName)
{
return this.Redirect(string.Format("/App/{0}/{1}", controllerName, this.Id));
}