0

I'm asking how to do a link with @Url.Action in a Razor view to make a link like

Controller/Action/123

I already made @Url.Action("Action","Controller", new { @ViewBag.ID }) but it makes me a link like

Controller/Action?ID=123

How do I make a URL without the querystring in the razor view?

4

4 回答 4

7

尝试:

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

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

于 2013-09-27T14:45:56.090 回答
1

提示:您也可以使用Html.ActionLink()which 省去您自己创建<a>标签的麻烦:

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

这将生成一个<a>标签,其linkTexturl 与Url.Action()您在 Jeff 的答案中看到的相同。

注意:不要忘记添加nullas 最后一个参数,否则会使用错误的重载,使用匿名类型 as htmlAttributes

于 2013-09-27T14:59:19.303 回答
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 }
        );

如果您愿意,或者如果您需要更多参数,您可以通过在路由表中添加更多路由来创建更多花哨的 url

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

于 2013-09-27T14:41:38.180 回答
-5
@Url.Action("Action/" + @ViewBag.ID,"Controller")
于 2013-09-27T14:47:31.210 回答