我在一个mvc程序上工作,只需点击一下按钮,我就可以将TextArea中的数据发送到控制器 . 通常我的代码按预期工作,但当TextArea中的数据由基于html的数据组成时,情况并非如此 .
Html代码:
<textarea id="bodyInfo"> </textarea>
<button onclick="Submit()" id="submitInfo">Create Notification</button>
ajax:
function Submit() {
$.ajax({
url: '@Url.Action("GetResults", "notification")',
type: 'GET',
data: { body: $('#bodyInfo').val()),
cache: 'false',
dataType: 'html',
success: function (result) {
$('#resultsTblInfo').html(result);
}
});
return false;
}
TextArea数据的示例示例:
<table style="width:100%">
<tbody>
<tr>
<td class="ellipses-title" style="color:#22557f;font-size:15px;font-weight:bold;margin-bottom:10px;margin-top:7px;border-right:1px solid #BFF1FD;text-align:right;padding-right:15px;"> The New Admin is Coming</td>
<td class="ellipses-text" style="padding-left:15px;" valign="center">Hello<br> Hello2</a>.
</td>
</tr>
</tbody>
</table>
当TextArea不是html数据而是原始文本但是当它是html数据时会失败,上面看到的内容会起作用 .
我能够通过使用来完成这项工作
“encodeURIComponent($('#bodyInfo') . val())”而不是“$('#bodyInfo') . val()”
在控制器方面,做
“body = HttpUtility.UrlDecode(body)”;
是否有更好的替代品来实现同样的目标?我是否将encodeURIComponent用于其预期的性质?为什么$('#bodyInfo') . val()在通过ajax传递html值时不起作用?如果这个问题是重复的,我会很感激,如果有人可以给我一个链接(我尝试通过谷歌搜索,但没有找到满意的答案)
2 回答
's exactly what you' d使用
encodeURIComponent
. 这个想法是在发送它时对(可能有问题的)值进行编码,然后在服务器端对其进行解码,以便在需要时使用它 .事实上,在MDN的
encodeURIComponent
文档页面上有一个例子:我认为在你的textarea html数据中,有一个"&"字符 . 是这样,问题是该字符不能发送到服务器 . 这是因为在发送数据时,浏览器收集数据,由&character
http://example.php?a=something&b=other
分隔 . 因此,如果您的数据中有&字符,浏览器将无法区分它是数据还是URI组件 .常见的解决方案是在发送数据之前将其转换为base64文本 . 通过这种方式,您可以使用
base64_decode
fonction(case of php)
在服务器中对其进行解码 . 您可以使用javascript中的window.btoa
函数对您的数据进行base64编码 . 另一个解决方案是你使用的 .第三个解决方案是用你知道的东西替换&chars,这些东西在你的textarea中永远不会存在,比如[@#alpha] . 希望能帮助到你