繁体   English   中英

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

[英]Passing url parameters from Url.Action variables in javascript

我想提到我已经阅读过的问题来开始我的问题

使用Url.action()传递动态javascript值

如何将参数从@ Url.Action传递到控制器

为了拥有更简洁的代码以及具有使用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" })"

Uri从params

"/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()会生成&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" }))"

但是,您可以通过仅生成基本url,并使用$ .param方法附加查询字符串参数,来使其更简单,更高效(不需要多个.replace() )。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM