ASP.NET MVC - 获取不包含传递的ID的当前操作的URL

时间:2009-12-11 01:32:11

标签: asp.net asp.net-mvc asp.net-mvc-routing

我有一个动作,我想拦截任何可能的整数id并将其放在哈希后面。 (我有一些处理id的Javascript)。我只是为了像我这样的URL黑客而做了这个额外的步骤,他可能会忘记我在id之前放置哈希的惯例。

这是我的行动:

public ActionResult Edit(int? id)
{
    if (id != null) return Redirect(Url.Action("Edit") + "/#" + id);

    return View();
}

问题是Url.Action方法保留了传递的id。 Url.Action(“编辑”)返回“{controller} / Edit / {id}”。我希望它只返回“{controller} / Edit”! (我的代码正在增加一个“/#{id}”)。

例如,对此网址的请求:

http://localhost:2471/Events/Edit/22

正在重定向到此网址:

http://localhost:2471/Events/Edit/22/#22

当我希望它重定向到此网址时:

http://localhost:2471/Events/Edit/#22

我很沮丧。有谁知道如何获取不包含传递的id的当前操作的URL?

3 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是为控制器操作定义路由,例如,路由将定义为“{controller} / {action} /”。然后使用类似于以下内容的内容来构建您的实际网址:

Url.RouteUrl("MyRoute") + "#" + id

不是最好的方法,但它有效。也许有一天微软会为路由添加片段支持。

答案 1 :(得分:0)

我不完全确定你可以使用RedirectToAction方法吗?

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.redirecttoaction.aspx

答案 2 :(得分:0)

我不是100%肯定(并且没有我的开发机器进行测试),但我认为你可以在id参数中传递散列并且它可以工作......例如:

Url.Action("Edit", "Events", new { id = "#" + id });

或者你可以用同样的方式使用RedirectToAction()。

另一种方法是定义Route {controller} / {Action} /#{id},然后使用Url.Route()代替。