0

ボタンのクリックに応じて、更新パネルに新しい動的コントロールを入力したいと思います。

ただし、コントロールの1つでイベントに応答して、これらの動的コントロールの値にアクセスできるようにもしたいと思います。

具体的には、ボタンで2つのドロップダウンメニューを表示する必要があります。メニューの1つ(または必要に応じて両方)が別の更新パネルにあります。更新パネルの最初のメニューで、他のメニューで選択された値に応じてデータを変更したいと思います。

私の問題は、1つのドロップダウンメニューでポストバックを発生させると、button_clickハンドラーで作成したため、もう1つのドロップダウンメニューが失われることだと思います。

Page_Initメソッドで動的コントロールを作成する必要があることはわかっていますが(または聞いたことがあります)、ボタンがクリックされた場合にのみコントロールを表示したいと思います。ページには、別の動的コントロールのセットを作成する必要のある他のボタンがあります。

ありがとう。

4

1 に答える 1

0

これを処理する方法はたくさんありますが、どのアプローチを取るかは、プロジェクトの要件と利用可能なリソースによって異なります。

一般的に最高のユーザーエクスペリエンスを提供する最もスムーズな方法は、Javascript技術を使用して、ページで必要なコントロールを表示および非表示にすることです。 JQueryは私がこれに推奨するライブラリです。最も基本的なレベルでは、コントロールのアクティブ化(button_clickイベントなど)を配線し、必要に応じて動的コンテンツを含むdivを非表示または表示します。

$("#control").show();
// and
$("#control").hide();

Visibleまたは、 ASP.NETの通常のWebコントロールの多くでプロパティを使用して、C#でこれを行うこともできます。通常のコードビハインドアプローチは次のようになります。

private void btnControl_Click(object sender, EventArgs e)
{
    var dynamicControl1 = FindControl("dynamicControl1");
    dynamicControl.Visible = false; // or true, as the case may be
}

ただし、この特定のアプローチは主にコードビハインドに関連付けられていますが、可能であれば避けることをお勧めします。それらをテストすることは事実上不可能であり、プロジェクトでの作業が面倒になります。MVC3フレームワークでも同様のアプローチを使用できますが、もちろん、設定しているコントロールの送受信方法が少し異なります。見える。これが持つもう1つの利点は、何かが表示されないように設定されている場合、テンプレートエンジン(エンジンによってはYMMV)によって生成されたHTMLにも表示されない傾向があることですが、これはかみそり)。したがって、あなたのWebページのソースを表示している人は、非アクティブなコントロールを見ることができません。これは、あなたにとって魅力的なものである場合とそうでない場合があります。

編集:問題は、これらのものを表示する方法に関係するのではなく、オンザフライの入力でそれらを作成して読み戻す方法に関係していると思います。

Javascriptでこれを行う方法があると確信しています(これはおそらくこれを行うための最もクリーンで最良の方法です)が、JSではその答えを知るのに十分ではありません。ASP.NETでこれを処理する方法は、サーバー側にコントロールを追加するdivを作成することです(を使用してrunat='server'、必要なものを追加します。ここでも、簡単なコードビハインドアプローチは次のようになります。

private void btnControl_Click(object sender, EventArgs e)
{
    foreach(var checkBoxChecked in chkBoxes.Where(x => x.Checked))
    {
        div.Controls.Add(new WebControl()) // or whatever the heck else it is you need.
    }
}

IEnumerable<CheckBox>もちろん、これはあなたが繰り返す必要があることを前提としています。IList<WebControl>追加するすべてのジャンクを追跡することもできます。また、追加するコントロールのdivにCSSが正しく適用されていることを確認する必要があります。繰り返しになりますが、コードビハインドはかなりひどいものです。この例を使用するのは、プロジェクトでスピンアップして自分でテストするのが簡単だからです。

于 2012-11-26T20:58:58.230 に答える