使用javascript在包含特殊字符的URL中传递参数[重复]
Posted
技术标签:
【中文标题】使用javascript在包含特殊字符的URL中传递参数[重复]【英文标题】:Passing Parameters in URL containing special characters using javascript [duplicate] 【发布时间】:2015-12-17 20:51:54 【问题描述】:您好,我正在尝试在包含参数的控制器中调用操作结果,但是每当这些参数之一包含 # 符号(特殊字符)时,字符串参数不包括参数中的 #sing 并且接下来所有参数都设置为 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 为空。
我们将不胜感激。
提前致谢。
[我不同意这个问题的重复,因为标记的重复问题被详细讨论过,详细的对话涵盖了这个问题的答案,但实际问题与这个问题完全不同。]
【问题讨论】:
#
是一个片段标识符。片段和它之后的任何东西都不会被发送到服务器。您需要确保将其替换为另一个字符。
但是你为什么要这样构建你的网址——而不是@Url.Action("ExportBankStatementSummary", "BankStatement", new legalName = ViewBag.LegalName, dba = ViewBag.DBA, .... )
如何将包含特殊字符的数据替换为其他字符请指导
是的,我可以这样做,但这样做有什么好处?
查看 Satpal 的答案以获取一个选项。使用@Url.Action()
的原因是它总是会生成正确的 url 并在内部根据你的路由定义进行验证(并且它的代码更少,更易于阅读)
【参考方案1】:
你需要encodeURIComponent()
encodeURIComponent() 方法通过将特定字符的每个实例替换为表示字符的 UTF-8 编码的一个、两个、三个或四个转义序列来对统一资源标识符 (URI) 组件进行编码(将只有四个转义由两个“代理”字符组成的字符序列)。
例子
var url = @Url.Content("~/BankStatement/ExportBankStatementSummary") +
"?legalName=" + encodeURIComponent('@ViewBag.LegalName')
【讨论】:
谢谢,你没看错!!!非常感谢你。以上是关于使用javascript在包含特殊字符的URL中传递参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JavaScript 中检查字符串是不是包含数字和特殊字符?