UpdatePanel 回发删除了使用 javascript 所做的更改

UpdatePanel postback removes changes made using javascript

我正在使用 ASP.NET UpdatePanel 进行部分回发。在服务器端回发 (ddl_SelectedIndexChanged) 之后,由 Javascript 函数设置的值(lblTotal 的值为 100)以某种方式被删除。无论如何要保留 Javascript 函数设置的值?

JavaScript:

<script type="text/javascript">

    function calculateTotal() {
        var lblTotal = document.getElementById("<%= lblTotal.ClientID%>");
        lblTotal.innerHTML = "100";
    }
</script>

HTML:

<asp:UpdatePanel ID="UpdateGrid" runat="server">
    <ContentTemplate>
        <asp:DropDownList ID="ddl" runat="server" OnTextChanged="ddl_SelectedIndexChanged"             AutoPostBack="true"  />
        <asp:CheckBox ID="chkLevels" runat="server" onclick="calculateTotal()"  />
        <asp:Label ID="lblTotal" runat="server" />
     </ContentTemplate>
</asp:UpdatePanel>

C#/隐藏代码:

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
   // Some code
}

这里的问题是,当您在 Javascript 中使用 calculateTotal 更改数据时,服务器不知道更改,因为您没有 post 将数据返回到服务器。

因此您需要使用 __doPostBack():

触发 postback 事件

客户端:

function calculateTotal() {
    var lblTotal = document.getElementById("<%= lblTotal.ClientID%>");
    //Calculation
    var totalValue = "100";

    __doPostBack('chkLevels', totalValue);
}

Page_Load 在服务器端:

protected void Page_Load(object sender, EventArgs e)
{

    if (Request["__EVENTTARGET"] == "chkLevels")
    {
        var totalValue = Request["__EVENTARGUMENT"];
        lblTotal.Text = totalValue;
    }

}

参见:how to use __doPostBack function in asp.net