[英]Javascript send innerHTML to server ASP.NET
我有一個關於Javascript和ASP.net控件之間的交互的問題。
在javascript中,我得到內容的innerHTML可編輯,如下所示:
var text = document.getElementById('corps').innerHTML;
document.getElementById('corpsToServer').value = text;
document.getElementById('callingServer').click();
這將為ASP.NET updatePanel的click事件調用操作,該操作調用了我的應用程序的服務端:
<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>
我知道是innerHTML的傳遞使我從服務器收到錯誤500。 一些帖子告訴我們,防止從用戶端進行注入是一個驗證問題,但是請配置:
ValidateRequest="false"
是個壞主意,不起作用。
如何在不顯示此錯誤的情況下將我的innerHTML發送到服務器端? 像他這樣的人假裝這只是一個字符串,而標簽只是字符串的一部分,而不是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發送到服務器之前對其進行編碼。 您可以使用jQuery輕松實現,但是在javascript中,您將必須創建自己的編碼方法。 您可以在此處查看示例: http : //www.yuki-onna.co.uk/html/encode.html
您可以禁用服務器驗證,可以將ValidateRequest="false"
放在頁面標題中,也可以將其放在web.config文件中(非常危險,因為它將應用於所有網站)。
如果您存儲HTML數據以在另一頁中顯示該解決方案,則該解決方案是不安全的,因為您的應用程序的某些用戶將能夠發送危險內容,這些內容將在其他用戶的瀏覽器中顯示。
使用encoder.js將html編碼為安全腳本,然后發送到asp.net。 您必須同時ValidateRequest="false"
。 您可以在此處獲取示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.