我有几个小的divs利用jQuerydraggable.这些div被放置在一个UpdatePanel,并在拖动器上我使用_doPostBack()JavaScript函数.我从页面表格中提取必要的信息.
我的问题是,当我调用此函数时,整个页面被重新加载,但我只想重新加载更新面板.
我的页面上有几个输入和选项元素,每个(几乎都有)附加了一个事件,一旦它们发生变化就会更新页面上的一些文本.我用jQuery真的很酷:)
我还使用了微软的Ajax框架,利用了UpdatePanel.我之所以这样做,是因为某些元素是基于某些服务器端逻辑在页面上创建的.我真的不想解释为什么我使用UpdatePanel - 即使它可以(它可以付出相当大的努力)被重写为仅使用jQuery我仍然想要UpdatePanel.
您可能已经猜到了 - 一旦我在UpdatePanel上回发,jQuery事件就会停止工作.我实际上是在期待这个,因为"回发"并不是真正的新回发所以我在document.ready中绑定事件的代码将不再被触发.我还通过在jQuery帮助库中阅读它来证实了我的怀疑.
无论如何,在UpdatePanel完成更新DOM之后,我仍然遇到重新绑定控件的问题.我最好需要一个不需要向页面添加更多.js文件(jQuery插件)的解决方案,但是能够捕获UpdatePanel的'afterupdating'这样简单,我可以调用我的方法重新绑定所有表单元素.
当用户悬停页面的某些元素时,我正在使用jQuery tip插件来显示帮助提示.
我需要在使用css选择器加载页面后注册插件事件.
问题是我使用的是ASP.NET更新面板,在第一次回发后,提示会停止工作,因为更新面板会替换页面内容,但不会重新绑定javascript事件.
在更新面板刷新其内容后,我需要一种方法来执行javascript回调,因此我可以重新绑定javascript事件以使提示再次起作用.
有没有办法做到这一点?
我有一个pageLoad函数,它在.ascx控件上设置一些我无法更改的css.在页面加载一切正常,但当更新面板更新控件时,我的css不再应用.如何在页面更新后重新运行我的功能?
$(function() {
$("textarea").attr("cols", "30");
$("input.tbMarker").css({ "width": "100px" }).attr("cols","25");
});
Run Code Online (Sandbox Code Playgroud)
这显然只在初始页面加载时运行.如何在更新后运行它?
我要求的UpdatePanel时间超过90秒.我收到此超时错误:
Microsoft JScript运行时错误:Sys.WebForms.PageRequestManagerTimeoutException:服务器请求超时.
有没有人知道是否有办法增加通话超时前的时间?
我在UpdatePanel中有一个Button.该按钮用作ModalPopupExtender的OK按钮.由于某种原因,按钮单击事件未触发.有任何想法吗?我错过了什么吗?
<asp:updatepanel id="UpdatePanel1" runat="server">
<ContentTemplate>
<cc1:ModalPopupExtender ID="ModalDialog" runat="server"
TargetControlID="OpenDialogLinkButton"
PopupControlID="ModalDialogPanel" OkControlID="ModalOKButton"
BackgroundCssClass="ModalBackground">
</cc1:ModalPopupExtender>
<asp:Panel ID="ModalDialogPanel" CssClass="ModalPopup" runat="server">
...
<asp:Button ID="ModalOKButton" runat="server" Text="OK"
onclick="ModalOKButton_Click" />
</asp:Panel>
</ContentTemplate>
</asp:updatepanel>
Run Code Online (Sandbox Code Playgroud) protected void timer1_Tick(object sender, EventArgs e)
{
foreach (RepeaterItem item in rpChat.Items)
{
TextBox txt = item.FindControl("txtChatMessage") as TextBox;
if (txt != null)
{
message[i] = txt.Text;
i--;
}
}
lblStatusChat.Text = "";
RepeaterBind();
string javaScript = "<script language=JavaScript>\n" + "alert('Button1_Click client-side');\n" + "</script>";
Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", javaScript);
}
Run Code Online (Sandbox Code Playgroud)
timer_click触发和更新面板.并且警报消息不会显示在timer_tick事件上
我在UpdatePanel中有一个GridView.在模板字段中是我用于标记项目的按钮.在功能上,这工作正常,但按钮总是触发整页回发而不是部分回发.如何让按钮触发部分回发?
<asp:ScriptManager ID="ContentScriptManager" runat="server" />
<asp:UpdatePanel ID="ContentUpdatePanel" runat="server" ChildrenAsTriggers="true">
<ContentTemplate>
<asp:GridView ID="OrderGrid" runat="server" AllowPaging="false" AllowSorting="false"
AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="">
<ItemTemplate>
<asp:LinkButton ID="MarkAsCompleteButton" runat="server" Text="MarkAsComplete"
CommandName="MarkAsComplete" CommandArgument='<%# Eval("Id") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="LoadDate" HeaderText="Load Date" />
<asp:BoundField DataField="EmployeeCutOffDate" HeaderText="Cut Off Date" />
<asp:BoundField DataField="IsComplete" HeaderText="Is Completed" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud) 我有我认为应该是一个相当简单的问题,但对于我的生活,我看不出我的问题.问题与ScriptManager.RegisterStartupScript有关,这是我之前多次使用过的.
我的场景是我有一个插入页面的自定义Web控件.控件(以及一个或两个其他)嵌套在UpdatePanel中.它们被插入到PlaceHolder的页面上:
<asp:UpdatePanel ID="pnlAjax" runat="server">
<ContentTemplate>
<asp:PlaceHolder ID="placeholder" runat="server">
</asp:PlaceHolder>
...
protected override void OnInit(EventArgs e){
placeholder.Controls.Add(Factory.CreateControl());
base.OnInit(e);
}
Run Code Online (Sandbox Code Playgroud)
这是页面上唯一的更新面板.
控件需要运行一些初始的javascript才能正常工作.控制电话:
ScriptManager.RegisterStartupScript(this, GetType(),
Guid.NewGuid().ToString(), script, true);
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
ScriptManager.RegisterStartupScript(Page, Page.GetType(),
Guid.NewGuid().ToString(), script, true);
Run Code Online (Sandbox Code Playgroud)
问题是脚本在首次显示页面时正确运行,但在部分回发后不会重新运行.我尝试过以下方法:
我唯一没有尝试的是使用UpdatePanel本身作为控件和类型,因为我不相信控件应该知道更新面板(并且在任何情况下似乎都没有获得更新的好方法面板?).
任何人都可以看到我在上面做错了什么吗?
谢谢 :)
好吧,回答上面的查询 - 它看起来好像占位符以某种方式混淆了ScriptManager.RegisterStartupScript.
当我将控件拉出占位符并将其直接编码到页面上时,Register脚本正常工作(我也将控件本身用作参数).
ScriptManager.RegisterStartupScript(this, GetType(), Guid.NewGuid().ToString(), script, true);
任何人都可以解释为什么注入控件到PlaceHolder会阻止ScriptManager正确注册脚本?我猜这可能与动态控件的生命周期有关,但如果有一个正确的上述过程,我会欣赏(据我所知).
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler) 对我来说不起作用,因为这会在任何更新面板完成加载后触发,我找不到客户端方法来找到哪一个
ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID AsyncPostBackSourceElementID 不适合我,因为这是一个服务器端对象,我想要客户端
ClientSide .Net框架必须知道它正在更新哪个UpdatePanel才能更新正确的内容.当然有一种方法来吸引这个事件?
任何帮助,将不胜感激.
updatepanel ×10
asp.net ×9
asp.net-ajax ×4
javascript ×4
ajax ×3
c# ×2
jquery ×2
callback ×1
gridview ×1
postback ×1
webforms ×1