ASP.NET MVC 4 以生成 URL 格式化程序作为控制器/操作/ID
本文关键字:程序 控制器 操作 格式化 ID URL MVC NET ASP | 更新日期: 2023-09-27 17:57:00
我的默认路由定义为
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">
但是如果我像这样编写剃刀页面 -
@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 格式?
谢谢
尝试使用 Html.BeginRouteForm
@using (Html.BeginRouteForm("Default", new { controller = "foo", action = "bar" }, FormMethod.Post, new { id="foo", enctype="multipart/form-data", accept_charset="utf-8" }))
{
}
问题在于您在Html.BeginForm
调用中排列参数的方式。根据您输入的参数,您当前正在调用
Html.BeginForm(actionName, controllerName, formMethod, htmlAttributes)
因此,new { id = ViewBag.AppId }
被视为 htmlAttributes。这就是为什么id
被重新命名为表单标签中的一个属性。
相反,您应该交换方法和 id 的位置,如下所示
Html.BeginForm("Default", "Request", new { id = ViewBag.AppId }, FormMethod.Post))
让我知道它是否适合您:)
这个问题已经通过一个函数解决了——
protected ActionResult RedirectToAppAction(string controllerName)
{
return this.Redirect(string.Format("/App/{0}/{1}", controllerName, this.Id));
}