2009-12-11 36 views
2

我有一個操作,我想攔截任何可能的整數ID並將其放在哈希後面。 (我有一些Javascript處理id)。我只是爲了像我這樣的URL黑客而做這個額外的步驟,他們可能會忘記我在ID之前放置哈希的慣例。ASP.NET MVC - 獲取當前操作的URL,但不包含傳遞的ID

這裏是我的行動:

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

    return View(); 
} 

的問題是,Url.Action方法保存傳入ID。 Url.Action(「Edit」)返回「{controller}/Edit/{id}」。我希望它只是返回「{控制器} /編輯」! (而我的代碼正在追加一個「/#{id}」)。

例如,該URL的請求:

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

被重定向到這個網址:

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

時,我希望它重定向到該網址:

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

我很沮喪。有誰知道如何獲取當前操作的URL不包含通過的ID?

+0

我找到了解決方法。用Url.Action(「blahblah」)替換Url.Action(「Edit」)。替換(「blahblah」,「Edit」)。 – 2009-12-11 01:53:55

回答

1

這樣做的一種方法是爲控制器動作定義一個路由,例如路由將被定義爲「{controller}/{action} /」。然後使用類似於以下內容來建立您的實際URL:

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

不是最好的方法,但它的工作原理。也許有一天微軟會爲路由添加片段支持。

0

我不是100%確定(並沒有我的dev的機器進行測試),但我認爲你可以在ID參數內通過散列和它的工作...例如:

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

或者你可以用同樣的方法使用RedirectToAction()。

另一種方法是定義一個Route {controller}/{Action} /#{id},然後改用Url.Route()。

+0

嗯,關閉,但它是URL編碼的「#」。所以重定向到/ Events/Edit /%2322 – 2009-12-11 02:04:38

+0

我也嘗試過定義一個路由到{controller}/{action} /#{id},但它是URL編碼的「#」了。 – 2009-12-11 02:19:15

+0

D'oh,沒有想到URL編碼。我想我的最後一個建議是定義一個不包含可以連接的ID的路由;例如路線「{控制器}/{動作} /」,然後像你一樣加上「#id」。 – 2009-12-11 13:12:52