【发布时间】:2017-10-17 09:26:37
【问题描述】:
我想通过提及我已阅读问题来开始我的问题
Passing dynamic javascript values using Url.action()
和
How to pass parameters from @Url.Action to controller
为了拥有更简洁的代码和使用 url 打开模态窗口的 javascript 函数,我不喜欢在我的 javascript 文件中使用 Razor。出于这个原因,我在我的 .cshtml 页面的 PageScripts 中设置了所有 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>
}
此类 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" })"
来自参数的 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"
【问题讨论】:
-
调用
params.exampleUrl(后能看到生成的链接吗? -
这是错字吗?你在这里错过了
replace:params.exampleUrl('pr1Id', actualParameter1Id) -
uri返回的 URL 是什么?您尚未分别提供actualParameter1Id、actualParameter2Id和actualParameter3Id内容(请参阅idownvotedbecau.se/beingunresponsive)。 -
问题是你的网址中的
&amp;(应该只是&) -
您应该可以使用
@Html.Raw(Url.Action(...)来生成正确的url,但这是一个低效的解决方案(使用多个.replace)。只需使用exampleUrl: "@Url.Action("ExampleAction", "ExampleController");创建基本 url,然后附加查询字符串值,例如使用var uri = params.exampleUrl + '?' + $.param({ parameter1Id: actualParameter1Id, parameter2Id: actualParameter2Id, .... });
标签: javascript asp.net-mvc url url-parameters url-action