【发布时间】: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 并在内部根据你的路由定义进行验证(并且它的代码更少,更易于阅读)
标签: javascript c# asp.net-mvc asp.net-mvc-3