-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 クラスのインスタンスを取得するには、PageRequestManager オブジェクトの getInstance() メソッドを使用する必要がありました。次に、非同期リクエストが初期化されて終了するときの関数を追加しました。これにより、非同期呼び出しの開始時と終了時に 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();
}

sharepoint は ID 名の前に一連のテキストを配置し、JavaScript は ID のテキスト リテラルだけではそれを見つけることができないため、ID 名に対して search() を実行する必要があったことに注意してください。jquery を使用したワイルド カード アプローチを使用して、以下を使用してパネルを見つけます。

$(' [id =Panel1]').show();//jquery でワイルドカードを使用して Panel1 ID を検索します

それを示すために。

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

非同期呼び出しが初期化されたときに更新パネルを非表示にします。更新パネルを非表示にする必要はありませんが、非表示にした方が私の特定の実装は見た目が良くなります。

于 2013-02-01T05:26:27.523 に答える