簡體   English   中英

Javascript將innerHTML發送到服務器ASP.NET

[英]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客戶端

最干凈的一種是在將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM