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

本文关键字:方式 编程 创建 控件 更新 SharePoint 中的 Web 可视 | 更新日期: 2023-09-27 17:56:54

如何在 SharePoint 的 C# 非可视 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);

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

好的,这就是我的发现。如果在更新面板外部创建更新进度控件,则当它触发时,它将无法侦听更新面板上的触发器。可以在下面的链接中阅读更多相关信息。

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 名称进行搜索(),因为 sharepoint 在您的 ID 名称之前放置了一堆文本,否则 javascript 将无法仅通过 ID 的文本文字找到它。jquery 的通配符方法用于使用以下方法查找面板:

$('[id=Panel1]').show();//use 通配符 in jquery 查找 Panel1 ID

来展示它。

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

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