2017-10-17 172 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;