部分回發期間我有一個ASP.NET頁面(WebForm1的)。關閉對話框後,我只需通過JavaScript更新UpdatePanel。現在的問題是,在這個js調用它不會阻止用戶界面時,。,對於一些進一步的處理將打開一個模態對話框WebForm2(經由OpenForm2()js函數)BlockUI通過JavaScript
這只是發生時,我打電話從服務器端(的button1_Click)的OpenForm2 JS方法。由於UI已進入阻止模式,因此在關閉WebForm2後,它不會等待完成部分回發(JavaScript)並取消阻止UI。
如果我直接調用JS OpenForm2在按鈕(按鈕2樣品中)的標籤的OnClientClick功能,它運作良好,並保持阻塞UI,直到回傳完成。
我試圖在add_endRequest中封裝部分回發js代碼,但在這種情況下,它一直調用refreshUpdatePanel()js方法,因此阻止/解除阻止UI繼續進行。可能這是由於在這種情況下在頁面上使用了兩個add_endRequest?
在這方面高度讚賞任何援助。
注:我已經使用jQuery的blockUI期間部分回發堵的頁面。
爲WebForm1的頁面中的代碼示例如下。 (WebForm2 aspx頁面只有一個關閉對話框和相關js函數的按鈕)。
WebForm1.aspx的
<head runat="server">
<title></title>
<script src="js/jquery-1.6.1.min.js" type="text/javascript"></script>
<script src="js/jquery.blockUI.js" type="text/javascript"></script>
<script type="text/javascript">
function OpenForm2() {
var url = "WebForm2.aspx";
var width = 950;
var height = 455; // screen.availHeight - (120 + 65);
// open modal dialog
obj = window.showModalDialog(url, window, "dialogWidth:" + width + "px; dialogHeight:" + height + "px; center:yes");
// partial postback to reflect the changes made by form2
refreshUpdatePanel();
//Sys.WebForms.PageRequestManager.getInstance().add_endRequest(refreshUpdatePanel);
// ** here it doesn't wait for the completion and unblocks the UI **
}
function refreshUpdatePanel() {
//window.__doPostBack('UpdatePanel1', '1');
// a timeout/delay before a client side updatepanel postback. That compelled the UI to go in blocking again with a little screen flickering.
setTimeout('__doPostBack("<%= UpdatePanel1.ClientID %>", "1")', 0);
}
$(document).ready(function() {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
$.blockUI.defaults.css = {};
function InitializeRequest(sender, args) {
// Whatever you want to happen when the async callback starts
$.blockUI();
}
function EndRequest(sender, args) {
// Whatever you want to happen when async callback ends
$.unblockUI();
}
});
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load">
<ContentTemplate>
<asp:Label ID="Label2" runat="server" Text=""></asp:Label><br />
<asp:Button ID="Button1" runat="server" Text="Button 1" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="Button 2" OnClientClick="OpenForm2();return false;" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
WebForm1.aspx.cs中
protected void Button1_Click(object sender, EventArgs e)
{
// some server side processing here
System.Threading.Thread.Sleep(1000);
// then calling javascript function to open form2 as modal
ScriptManager.RegisterClientScriptBlock(UpdatePanel1, UpdatePanel1.GetType(), "Button1Click", "OpenForm2();", true);
}
protected void UpdatePanel1_Load(object sender, EventArgs e)
{
string parameter = Request["__EVENTARGUMENT"];
if (parameter == "1")
{
System.Threading.Thread.Sleep(3000);
Label2.Text = DateTime.Now.ToString();
}
}
我沒有找到解決此問題的方法。但是對於解決方法,我在客戶端updatepanel回發之前放置了一個超時/延遲。這迫使UI在屏幕閃爍的情況下再次進入阻塞狀態。我已經更新了示例中上面的refreshUpdatePanel()js方法中的代碼行。 – 2013-02-24 13:47:44