我在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数据时会失败,上面看到的内容会起作用。
我能够使用
完成这项工作&#34; encodeURIComponent方法($(&#39;#bodyInfo&#39;。)VAL())&#34;代替&#34; $(&#39;#bodyInfo&#39;)。val()&#34;
在控制器方面,执行
&#34; body = HttpUtility.UrlDecode(body)&#34 ;;
是否有更好的替代品来实现同样的目标?我是否将encodeURIComponent用于其预期的性质?为什么$(&#39;#bodyInfo&#39;)。val()在通过ajax传递html值时不起作用?如果这个问题是重复的,我会很感激,如果有人可以给我一个链接(我尝试通过谷歌搜索,但没有找到令人满意的答案)
答案 0 :(得分:1)
我认为在你的textarea html数据中,有一个“&amp;”字符。
是这样,问题是,角色和无法发送到服务器。这是因为在发送数据时,浏览器会收集数据,并由&amp;字符http://example.php?a=something&b=other
。所以,如果有&amp;如果数据是数据或URI组件,则浏览器将无法区分数据中的字符。
常见的解决方案是在发送数据之前将其转换为base64文本。这样您就可以使用base64_decode
fonction (case of php)
在服务器中对其进行解码。您可以使用javascript中的window.btoa
函数对您的数据进行base64编码。另一个解决方案是你使用的。
第三种解决方案是替换&amp;通过你知道的东西来表示它将永远不会存在于你的textarea中,如[@#alpha]。 希望它有所帮助
答案 1 :(得分:1)
这正是您使用encodeURIComponent
的原因。这个想法是在发送它时对(可能有问题的)值进行编码,然后在服务器端对其进行解码,以便在需要时使用它。
事实上,在MDN的encodeURIComponent
文档页面上有一个示例:
为了避免对服务器的意外请求,您应该对任何用户输入的参数调用encodeURIComponent,这些参数将作为URI的一部分传递。例如,用户可以为变量注释键入“Thyme&amp; time = again”。不对此变量使用encodeURIComponent将再次给出comment = Thyme%20&amp; time =。请注意,&符号和等号表示新的键和值对。