2017-10-17 169 views
2

我謹提的是,我已經閱讀了問題傳遞URL參數在JavaScript

Passing dynamic javascript values using Url.action()

How to pass parameters from @Url.Action to controller

對於具有清潔,開始我的問題代碼和具有打開模式窗口與url作爲爭論的JavaScript函數,我不喜歡在我的JavaScript文件中使用Razor。出於這個原因,我將我所有的Url動作設置在我的.cshtml頁面的PageScripts中,並且在我的函數中使用了這些變量。

@section PageScripts { 
    // render necessairy scripts 
    <script type="text/javascript"> 
     view.params = { 
      exampleUrl: "@Url.Action("ExampleAction", "ExampleController", new { parameter1Id = "pr1Id", parameter2Id = "pr2Id", parameter3Id = "pr3Id" })", 
      // More url actions and page module parameters 
     } 
    }; 
    </script> 
} 

這樣的url操作用於模態窗口我必須從選定的行打開,我必須使用許多參數。我在JavaScript函數中使用它們的方法是這樣的

var uri = params.exampleUrl.replace('pr1Id', actualParameter1Id).replace('pr2Id', actualParameter2Id).replace('pr3Id', actualParameter3Id); 

我控制器是喜歡這樣

public ActionResult ExampleAction(string parameter1Id, string parameter2Id, string parameter3Id){ 
    // do stuff and return View... 
} 

我的問題是,當我通過一個參數我控制器獲取的值正確。當我通過多個參數時,雖然我從調試中看到uri參數已更改並採用了新參數,但在我的控制器中只有第一個參數正確。其他變量即將爲空。

例子:

addCandidateTaskUrl: "@Url.Action("Action", "Controller", new { candidacyId = "cId", candidateId = "cndId", typeOfAction = "tpA" })" 

烏里從PARAMS

"/ApplicationName/Controller/Action?candidacyId=cId&amp;candidateId=cnId&amp;typeOfAction=tpA" 

烏里替換值

"/ApplicationName/Controller/Action?candidacyId=97c89ac6-3571-48a1-a904-d4b3f2594d9b&amp;candidateId=a05amn84-33a1-4fcb-8c89-e44635d67d63&amp;typeOfAction=COMPLETED" 
+1

我們可以看到調用'params.exampleUrl('後生成的鏈接? – GGO

+4

這是一個錯誤?你在這裏錯過了'replace':'params.exampleUrl('pr1Id',actualParameter1Id)' – adiga

+0

'uri'返回的URL是什麼?您並未分別提供「actualParameter1Id」,「actualParameter2Id」和「actualParameter3Id」內容(請參閱http:// idownvotedbeau。SE/beingunresponsive)。 –

回答

3
Url.Action()腳本

您使用的是產生&amp;,而不是在&網址,所以不是

../Controller/Action?candidacyId=cId&amp;candidateId=cnId&amp;typeOfAction=tpA" 

你需要生成

../Controller/Action?candidacyId=cId&candidateId=cnId&typeOfAction=tpA" 

可以通過在Html.Raw()所以它不是編碼

addCandidateTaskUrl: "@Html.Raw(Url.Action("Action", "Controller", new { candidacyId = "cId", candidateId = "cndId", typeOfAction = "tpA" }))" 

然而它包裹做到這一點,你可以讓這個更簡單,更高效(無需要多個.replace()),只需生成基礎url,並附加查詢字符串參數,使用$.param method

view.params = { 
    baseUrl: '@Url.Action("Action", "Controller")' // Html.Raw not required 

var queryString = $.param({ param1Id: actualParam1Id, param2Id: actualParam2Id, ... }); 
var uri = params.baseUrl + '?' + queryString;