Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从javascript中的url.Action变量传递url参数_Javascript_Asp.net Mvc_Url_Url Parameters_Url Action - Fatal编程技术网

从javascript中的url.Action变量传递url参数

从javascript中的url.Action变量传递url参数,javascript,asp.net-mvc,url,url-parameters,url-action,Javascript,Asp.net Mvc,Url,Url Parameters,Url Action,我想首先提到我已经阅读了这些问题 及 为了有更干净的代码和javascript函数打开以url作为参数的模式窗口,我不希望在javascript文件中使用Razor。因此,我在.cshtml页面的页面脚本中设置了所有Url操作,如下所示,并在函数中使用变量 @section PageScripts { // render necessairy scripts <script type="text/javascript"> view.params =

我想首先提到我已经阅读了这些问题

为了有更干净的代码和javascript函数打开以url作为参数的模式窗口,我不希望在javascript文件中使用Razor。因此,我在.cshtml页面的页面脚本中设置了所有Url操作,如下所示,并在函数中使用变量

@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>
}
我的控制器是这样的

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" })"
来自参数的Uri

"/ApplicationName/Controller/Action?candidacyId=cId&amp;candidateId=cnId&amp;typeOfAction=tpA"
值替换后的Uri

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

您可以在脚本中使用
Url.Action()
来生成
&&
,因此

../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" }))"
但是,只需生成基本url,并使用


调用
params.exampleUrl(
)后我们是否可以看到生成的链接?这是一个输入错误吗?您错过了
replace
此处:
params.exampleUrl('pr1Id',actualParameter1Id')
uri返回了什么URL
?您没有分别提供
actualParameter1Id
actualParameter2Id
actualParameter3Id
内容(请参阅)。问题是URL中的
(应该是
&
)您应该能够使用
@Html.Raw(URL.Action(…)
生成正确的url,但这是一个低效的解决方案(使用多个
.replace
)。只需使用
exampleUrl:“@url.Action”(“ExampleAction”,“ExampleController”);
创建基本url,然后使用
var uri=params.exampleUrl+”?“+$.param追加查询字符串值({parameter1Id:actualParameter1Id,parameter2Id:actualParameter2Id,…。});
view.params = {
    baseUrl: '@Url.Action("Action", "Controller")' // Html.Raw not required
var queryString = $.param({ param1Id: actualParam1Id, param2Id: actualParam2Id, ... });
var uri = params.baseUrl + '?' + queryString;