-2

如何在 Sharepoint 的 ac# 非可视 Web 部件中以编程方式创建进度更新控件?

我正在使用 c#,目标是在 ProgressUpdate 控件内创建一个“正在加载...”文本,该文本在更新面板加载更多内容时变为可见,然后在加载内容时消失。如果有人可以提供帮助,那就太棒了。我尝试了以下方法,但没有运气。一个按钮触发更新面板并且更新效果很好,但是当我尝试添加更新进度时,它会被添加到页面中,但是当我单击触发更新的按钮时它永远不会出现。

UpdatePanel up = new UpdatePanel();
up.UpdateMode = UpdatePanelUpdateMode.Always;
up.ID = "Panel1";

UpdateProgress upp1 = new UpdateProgress();
upp1.AssociatedUpdatePanelID = up.ID.ToString();

upp1.ID = "UpdateProgress1";

upp1.Controls.Add(new LiteralControl("<p>Loading...</p>"));

Controls.Add(upp1);
4

1 回答 1

0

好吧,这就是我发现的。如果您在更新面板之外创建更新进度控件,则在触发更新面板时将无法侦听更新面板上的触发器。可以在下面的链接中阅读更多内容。

http://www.mostlydevelopers.com/blog/post/2008/08/23/Show-UpdateProgress-when-using-an-UpdatePanel-with-Triggers.aspx

因此,由于我是这样做的,所以我不得不使用 javascript 解决方法。我必须使用 PageRequestManager 对象的 getInstance() 方法来获取 PageRequestManager 类的实例。然后,我在异步请求初始化和结束时添加了它的函数。这将允许我们在异步调用开始和结束时显示我们的 UpdateProgress 控件。(请参阅下面的 Javascript)

//Function for postbackUpdateProgress
var prm = Sys.WebForms.PageRequestManager.getInstance();
var postBackElement;

function CancelAsyncPostBack() {
    if (prm.get_isInAsyncPostBack()) {
        prm.abortPostBack();
    }
}

prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);

function InitializeRequest(sender, args) {
    if (prm.get_isInAsyncPostBack()) {
        args.set_cancel(true);
    }
    //Get the element that asynchronous postback
    postBackElement = args.get_postBackElement();

    //check to see if any of the following controls activate sender request.
    //search is used to search for the ID name in the string that sharepoint spits out
    // as the ID.
    var controlA = postBackElement.id.search("DropDownListType");
    var controlB = postBackElement.id.search("UserProfileDropList");
    var controlC = postBackElement.id.search("MoreNewsLinkButton");
    var controlD = postBackElement.id.search("PreviousNewsLinkButton");

    if (controlA != -1 || controlB != -1 || controlC != -1 || controlD != -1) {
        $('*[id*=Panel1]:visible').hide();
        //show UpdateProgress
        $('*[id*=UpdateProgress1]').show();
    }
}
//After async postback complete, then show panel again and hide UpdateProgress
function EndRequest(sender, args) {
    $('*[id*=Panel1]').show();//use wild card in jquery to find Panel1 ID
    $('*[id*=UpdateProgress1]:visible').hide();
}

请注意,我必须对 ID 名称进行 search(),因为 sharepoint 在您的 ID 名称之前放置了一堆文本,否则 javascript 将无法仅通过 ID 的文本文字找到它。使用 jquery 的通配符方法通过以下方式查找面板:

$(' [id =Panel1]').show();//在jquery中使用通配符查找Panel1 ID

展示它。

$(' [id =Panel1]:visible').hide();

在异步调用初始化时隐藏更新面板。您不必隐藏更新面板,但如果我这样做,我的特定实现看起来更美观。

于 2013-02-01T05:26:27.523 回答