我有一个动作,我想拦截任何可能的整数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?
答案 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()代替。