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 格式?

谢谢

ASP.NET MVC 4 以生成 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));
}