我问如何在Razor视图中与@Url.Action
建立链接,以建立像
Controller/Action/123
我已经制作了@Url.Action("Action","Controller", new { @ViewBag.ID })
,但它让我成为像
Controller/Action?ID=123
如何在剃刀视图中创建没有查询字符串的URL?
答案 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>
标记,其中包含linkText
和Url.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")