Постбэк UpdatePanel удаляет изменения, сделанные с помощью javascript - PullRequest
0 голосов
/ 16 апреля 2020

Я использую 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
}

1 Ответ

1 голос
/ 28 апреля 2020

Проблема в том, что когда вы изменяете данные с помощью calculateTotal в Javascript, сервер не знает об изменениях, поскольку вы не отправляете данные обратно на сервер.

Итак, вам нужно запустить событие обратной передачи с помощью __doPostBack():

На стороне клиента:

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;
    }

}

См .: как использовать функцию __doPostBack в asp. net

...