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
我正在使用 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()
:
客户端:
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