ASP.NET MVC 4生成URL Formate作为Controller / Action / ID

时间:2014-04-06 04:47:02

标签: c# asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-routing

我将默认路由定义为

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

由于

3 个答案:

答案 0 :(得分:0)

尝试使用Html.BeginRouteForm

@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));
}