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

标签 javascript asp.net-mvc url url-parameters url-action

我想通过提及我已阅读问题来开始我的问题

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);

我的 Controller 是这样的

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

我的问题是,当我传递一个参数时,我的 Controller 会正确获取值。当我传递多个参数时,虽然我从调试中看到 uri 参数已更改并采用了新参数,但在我的 Controller 中只有第一个参数正确。其他变量变为空。

例子:

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() 生成 & 而不是 url 中的 &,所以不是

../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 并使用 $.param method 附加查询字符串参数来简化和提高效率(无需多个 .replace())

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

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

关于javascript - 从 javascript 中的 Url.Action 变量传递 url 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46786850/

相关文章:

javascript - Fabric.js 图像上的圆形边界框

asp.net-mvc - 为什么在 MVC 中使用包会导致内存使用增加

rest - Angular 2 - 动态查找要在 http 请求(服务)中使用的基本 url

javascript - 向 'Failed propType: Invalid prop ` 提供的 React 错误 `Provider` children,需要一个 ReactElement'

javascript - 在 jquery 中复制/克隆带有选定选项的下拉列表

javascript - KnexJS 外键约束中的种子表

asp.net-mvc - 如何将存储库传递给 ASP.NET MVC 中的授权属性

asp.net - 如何在 Windows 10 上的 IIS 10 中运行 ASP.NET MVC 应用程序

django - 服务器上 Django 中的 STATIC_ROOT

android - Imageloader 仅在列表项离开屏幕后加载列表中的图像