在Razor View中创建链接时如何获得漂亮的URL?

时间:2013-09-27 14:39:07

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

我问如何在Razor视图中与@Url.Action建立链接,以建立像

这样的链接
Controller/Action/123

我已经制作了@Url.Action("Action","Controller", new { @ViewBag.ID }),但它让我成为像

这样的链接
Controller/Action?ID=123

如何在剃刀视图中创建没有查询字符串的URL?

4 个答案:

答案 0 :(得分:7)

尝试:

@Url.Action("actionname", "controllername", new { id = ViewBag.Id})

我认为问题只是您没有指定路由参数集合中的值是“id”。当然,我假设您在RegisterRoutes中使用默认路由配置。

答案 1 :(得分:1)

提示:您还可以使用Html.ActionLink(),这样可以省去自己创建<a>代码的麻烦:

@Html.ActionLink("linkText", "actionName", "controllerName", new { id = ViewBag.ID }, null);

这将生成一个<a>标记,其中包含linkTextUrl.Action()相同的网址,您可以在杰夫的回答中看到。

注意:不要忘记添加null作为最后一个参数,否则它将使用错误的重载并使用匿名类型htmlAttributes

答案 2 :(得分:0)

使用Url.RouteUrl(String, Object)而非Url.Action()

使用默认路由名称..必须为Default 所以你的代码应该是:

@Url.RouteUrl("Default", new {controller = "SomeControler", action = "SomeAction" ,  id = @ViewBag.ID })

这样做会给你如下网址:SomeController/SomeAction/5(假设ID为5)

这是因为默认情况下项目mvc模板包含Default路由,如下所示:

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

如果您愿意,或者如果您需要更多参数,可以通过在路由表中添加更多路由来创建更多精美网址

这里是说明:http://msdn.microsoft.com/en-us/library/dd505215(v=vs.108).aspx

答案 3 :(得分:-5)

@Url.Action("Action/" + @ViewBag.ID,"Controller")