我花了很多时间研究如何在Update面板外更新标签。最后找到了一些东西,但它没有更新标签。如果我们刷新页面,它工作正常。请告诉我代码中的错误或任何新方法。请在下面找到我的代码。我认为需要为脚本管理器或dataItem()添加更多代码 谢谢大家的回复! 代码隐藏文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class scriptMgr : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void timer_Tick(object sender, EventArgs e)
{
if (ScriptManager1.IsInAsyncPostBack)
{
ScriptManager1.RegisterDataItem(Label3, "Hi");
}
}
}
}
Aspx page
<div>
<asp:Label ID="Label3" runat="server" Text="krwelkr"></asp:Label>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<script type="text/javascript" language="javascript">
enter code here
Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(PageLoadingHandler);
function PageLoadingHandler(sender, args) {
var dataItems = args.get_dataItems();
if ($get('Label3') != null)
$get('Label3').innerHTML = dataItems['Label3'];
}
</script>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
</div>
答案 0 :(得分:3)
如果您需要使用服务器中的动态内容更新标签,请将其包装在同一个更新面板或其他更新面板中。
如果Label文本不是动态的,你可以在触发正确的事件之前使用JS来改变标签。
此外,UpdatePanels会&#34; 导致回发 &#34;。只是你没有注意到它们。
或者你可以这样做:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode=Conditional>
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
代码隐藏:
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Updated";
}
答案 1 :(得分:2)
您需要使用PageRequestManager
的 pageLoaded 事件。
在更新页面上的任何内容之前,会引发 pageLoading 事件。因此,如果您还在其他任何位置更改了标签的内容,那么您在pageLoading
活动中所做的更改将会丢失。
因此,当使用由于同步或异步回发而刷新页面上的所有内容后引发的pageLoaded
事件,在此事件中创建的chnages将覆盖在其他任何位置进行的所有更改将是决赛。
<script type="text/javascript" language="javascript">
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler)
function PageLoadedHandler(sender, args) {
var dataItems = args.get_dataItems();
if ($get('Label3') != null)
// set Label3 to your actual values. You can test/debug by adding
// any test value
$get('Label3').innerHTML = "TTTTestingggg";
}
</script>
答案 2 :(得分:2)
在事件后面的代码中添加注册脚本,
protected void timer_Tick(object sender, EventArgs e)
{
if (ScriptManager1.IsInAsyncPostBack)
{
//ScriptManager1.RegisterDataItem(Label3, "Hi");
ScriptManager.RegisterStartupScript(this, this.GetType(), "setLabelOrAnyName", "jQuery(function($) { $('#Label3').text('Whatever')});", true);
}
}
这应该有用。
如果您没有使用jQuery
库代替simple javascript
代码,请注意。