从javascript中的url.Action变量传递url参数
我想首先提到我已经阅读了这些问题 及 为了有更干净的代码和javascript函数打开以url作为参数的模式窗口,我不希望在javascript文件中使用Razor。因此,我在.cshtml页面的页面脚本中设置了所有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 =
@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&candidateId=cnId&typeOfAction=tpA"
值替换后的Uri
"/ApplicationName/Controller/Action?candidacyId=97c89ac6-3571-48a1-a904-d4b3f2594d9b&candidateId=a05amn84-33a1-4fcb-8c89-e44635d67d63&typeOfAction=COMPLETED"
您可以在脚本中使用
Url.Action()
来生成&而不是url中的&
,因此
../Controller/Action?candidacyId=cId&candidateId=cnId&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;