使用javascript在包含特殊字符的URL中传递参数

时间:2015-09-21 08:18:40

标签: javascript c# asp.net-mvc asp.net-mvc-3

您好我正在尝试在包含参数的控制器中调用操作结果,但只要其中一个参数包含#sign(特殊字符),字符串参数就不包括参数中的#ssing和Next所有参数都设置为null。

以下是我的java脚本,通过它我可以调用我的操作结果。

    <script type="text/javascript">
        $(document).ready(function () {
            $('#btnExport').unbind().click(function () {
                var url = @Url.Content("~/BankStatement/ExportBankStatementSummary") +
                    "?legalName=" + '@ViewBag.LegalName' +
                    "&dba=" + '@ViewBag.DBA' + 
                    "&contactPerson=" + '@ViewBag.ContactPerson' +
                    "&address=" + '@ViewBag.Address' + 
                    "&period=" + '@ViewBag.Period' +
                    "&totalHeading=" + '@ViewBag.TotalHeading';
                window.location = url;
            });
        });
    </script>

这是在这个java脚本中调用的操作结果

public ActionResult ExportBankStatementSummary(string legalName, string dba, 
                                               string contactPerson, string address, 
                                               string period, string totalHeading)
    {
        ViewBag.LegalName = legalName;
        ViewBag.DBA = dba;
        ViewBag.ContactPerson = contactPerson;
        ViewBag.Address = address;
        ViewBag.Period = period;
        ViewBag.TotalHeading = totalHeading;

        ...

问题在于,在动作结果参数中,当任何参数包含任何特殊字符(在这种情况下为#)时,该参数和下一个参数将变为空。

例如,如果地址是“Street#2”,则参数地址变为“Street”,下一个参数period和totalHeading变为null。

任何帮助都将受到高度赞赏。

提前致谢。

[我不同意这个问题的重复,因为详细讨论了标记的重复问题,详细的对话涵盖了这个问题的答案,但实际问题与这个问题完全不同。]

1 个答案:

答案 0 :(得分:2)

您需要encodeURIComponent()

  

encodeURIComponent()方法通过将某些字符的每个实例替换为表示字符的UTF-8编码的一个,两个,三个或四个转义序列来编码统一资源标识符(URI)组件(将只有四个转义符号)由两个“代理”字符组成的字符序列。

实施例

 var url = @Url.Content("~/BankStatement/ExportBankStatementSummary") +
                "?legalName=" + encodeURIComponent('@ViewBag.LegalName')