2011-09-08 61 views
2

我正在使用C#,MVC3和Razor。MVC3 - Javascript中動態URL重定向

我有一個javascript函數(在視圖中),當一個特定的菜單項被點擊時被調用。在這個函數中,我需要建立一個帶有參數的新URL(基於屏幕上的其他選擇)並重定向到它。它希望它能做這樣的事情:

ValueA和ValueB是JavaScript部分中的變量,並用值填充。

function doSomething(ID) { 
    location.href = "../Area/Controller/Action?ID=" + ID + "&ValueA=" + ValueA + "&ValueB=" + ValueB; 
    } 

然而,由於MVC的性質,我需要確保URL永遠是對的,無論用戶怎麼到了頁面。我試着使用@ Url.Content(「」)(見下面的代碼塊),但我碰到的問題是:

  • 「ID」不會在目前情況下
  • 的存在名稱名稱「值a」不在當前情況下存在
  • 「VALUEB」這個名字不會在目前情況下

存在這裏就是我想這樣做,但在得到上述錯誤的內容的示例:

function doSomething(ID) { 
    location.href = @Url.Content("~/Area/Controller/Action?ID=" + ID + "&ValueA=" + ValueA + "&ValueB=" + ValueB); 
    } 

我該如何做這項工作?有沒有更好的辦法?

感謝, 託尼

回答

6

你應該串聯的靜態部分,動態部分:

location = "@Url.Content("~/Area/Controller/Action")?ID=" + ID + "&ValueA=" + ValueA + "&ValueB=" + ValueB; 

"@...?ID="是一個JavaScript字符串文字。
@Url.Content("...")是將原始文本發送到Javascript文字的服務器端代碼。

+0

太棒了!這很有意義。我希望我已經想到了。 –

+3

順便說一句,你應該調用'@ Url.Action'而不是'Content'。 – SLaks

+0

謝謝。我修改了代碼以使用'@ Url.Action',因爲它與當前視圖位於同一個控制器中。很棒。 –