1

今日、奇妙な行動に遭遇しました。当惑しているので、誰かが私のためにそれを明らかにしてくれることを望んでいました.

エラー/成功/警告メッセージをユーザーに表示するという唯一の目的で、UI と対話するために使用するメソッドがいくつかあります。

ここにそれらの1つがあります

        public static void Confirm(string text)
    {
        var page = (Page)HttpContext.Current.Handler;
        var uiConfirm = new HtmlGenericControl("div")
        {
            ID = "uiNotify",
            InnerHtml = text
        };
        uiConfirm.Attributes.Add("class", "ui-confirm");
        page.Master.FindControl("form1").Controls.AddAt(2, uiConfirm);
    }

これは、今朝遭遇した1つのニュアンスを除いて完全に正常に機能し、誰かが私のためにいくつかの光を当ててくれることを望んでいました.

私はあなたのミルプロファイル編集ページの実行に取り組んでいます. このページでは、ページの読み込み時にいくつかのドロップダウン リスト (国、州/州) をバインドしています。下部にサブミットがあり、情報を更新するために発生するクリック イベントがあり、上記のメソッドを呼び出して、情報が正常に更新されたことをユーザーに通知します。これは、送信ボタンを初めてクリックしたときに機能します。ページがポストバックされ、データベースで情報が更新され、動的に追加された div が表示され、確認メッセージが表示され、すべて問題ありません。ただし、送信ボタンをもう一度クリックすると、ドロップダウンに SelectedItem I'm binding in the page load is null (オブジェクト参照がオブジェクトのインスタンスに設定されていません) と表示されて失敗します。ドロップダウンは実際には2番目に何らかの理由で消去されますポストバックですが、最初ではありません。

他のすべてを試した後、必死になって、確認メソッドを呼び出すことにしました...そして、奇妙なことにエラーが消え、ページの情報を好きなだけ更新できます。

作業中のページに汎用コントロールを静的に追加し、メソッドをわずかに変更して、動的に汎用コントロールをフォームに追加する代わりに、ページ上の汎用コントロールを見つけるだけで、同じエラーは発生しません。 .

ページから 2 つのドロップダウンを削除するか、それらの操作を停止すると、問題も解決します。

フォームに動的コントロールを追加すると、ポストバックでドロップダウンが消去されるのはなぜですか?

4

1 に答える 1

1

PlaceHolderクラスを使用することを検討する必要があると思います。MasterPageAddAt(2, uiConfirm)

マークアップ:

.......
<asp:PlaceHolder id="PlaceHolder1" 
           runat="server"/>
......

分離コード:

public static void Confirm(string text)
{
    var page = (Page)HttpContext.Current.Handler;
    var uiConfirm = new HtmlGenericControl("div")
    {
        ID = "uiNotify",
        InnerHtml = text
    };
    uiConfirm.Attributes.Add("class", "ui-confirm");

    //may need to change depending on where you put your placeholder
    Control placeHolder = page.Master.FindControl("PlaceHolder1"); 
    placeHolder.Controls.Clear();
    placeHolder.Controls.Add(uiConfirm);
}
于 2012-04-10T16:48:10.667 に答える