Javascript 将 innerHTML 发送到服务器 ASP.NET
本文关键字:服务器 ASP NET innerHTML Javascript | 更新日期: 2023-09-27 18:27:39
我有一个关于Javascript和 ASP.net 控件之间的某些交互的问题。
在javascript中,我得到了一个可编辑的内容的内部HTML,如下所示:
var text = document.getElementById('corps').innerHTML;
document.getElementById('corpsToServer').value = text;
document.getElementById('callingServer').click();
这调用一个 ASP.NET update面板的单击事件的操作,该面板调用我的应用程序的serveur端:
<form id="Form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel runat="server">
<br />
<asp:TextBox CssClass="serveurNeeded" runat="server" ID="corpsToServer" ClientIDMode="Static" ></asp:TextBox>
<br />
<asp:TextBox CssClass="serveurNeeded" ID="recup" runat="server" ClientIDMode="Static">
</asp:TextBox>
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="callingProlexis" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</div>
<asp:Button CssClass="serveurNeeded" ID="callingProlexis" runat="server" OnClick="tryReturn"
ClientIDMode="Static" Text="callhim" />
</form>
然后调用是这样的:
<script language="C#" type="text/C#" runat="server">
public void tryReturn(object sender, EventArgs e)
{
prolexisIMPL proxy = new prolexisIMPL();
string getCorpsText = corpsToServer.Text;
string retourTest = proxy.tryThis(getCorpsText);
recup.Text = retourTest;
UpdatePanel1.Update();
ScriptManager.RegisterClientScriptBlock(this, GetType(), "mykey", "afterServerReturn();", true);
}
</script>
我认为是内部HTML的传递使我从服务器收到错误500。一些帖子告诉这是一个验证问题,以防止从用户端注入,但配置:
ValidateRequest="false"
是一个坏主意,不起作用。
我怎样才能设法将我的内部HTML发送到服务器端而不显示此错误?就像他假装它只是一个字符串,标签只是字符串的一部分,而不是 html 或 javascript 注入。
配置 ASP.NET MVC 4.0,没有代码隐藏,Vanilla Javascript,IE5。
编辑:错误:
Sys.Webforms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned from the server was : 500
您有几种解决方案:
对 HTML 客户端进行编码
最干净的方法是在将html发送到服务器之前对其进行编码。你可以用jQuery轻松做到这一点,但在javascript中,你必须创建自己的编码方法。你可以在这里看到一个例子: http://www.yuki-onna.co.uk/html/encode.html
禁用验证
您可以禁用服务器验证,将ValidateRequest="false"
放在页眉中或将其放在 web.config 文件中(非常危险,因为它将应用于您的所有网站(。
如果您存储 HTML 数据以在另一个页面中显示,则此解决方案不安全,因为应用程序的某些用户将能够发送将在其他用户的浏览器中显示的危险内容。
使用编码器.js将HTML编码为安全脚本,然后发送到 asp.net。你必须随之ValidateRequest="false"
。您可以在此处获取示例。