2

シリアル化されたディクショナリ(controlId-文字列、controlValue-文字列)を使用して、1つのWebフォームからすべてのコントロールを保存しようとしています。次に、そのディクショナリを逆シリアル化し、コントロールに値を動的に入力します。

問題は、一部のコントロールにAutoPostBackがtrueであり、イベントハンドラーもあることです。これらのイベントハンドラーを動的に呼び出す方法はありますか?コントロールのIDによる別の切り替えを避けたい。

元:

foreach (KeyValuePair<string, string> kvp in dict)
{
    Control c = findControlRecursive(Page, kvp.Key);
    if (c != null)
    {
        switch (c.GetType().Name)
        {
            case "TextBox":
                ((TextBox)c).Text = kvp.Value;
                if (((TextBox)c).AutoPostBack) .......

編集:

私には10の異なるフォームがあるとしましょう。それぞれに約50のコントロールがあります。データセットを追加/編集したい。各コントロールの列を持つデータベース内のテーブルを避けようとしているので、シリアル化を使用したいと思います。

4

2 に答える 2

1

私の観点からすると、あなたは車輪を再発明しようとしているのです。ASP.NET は、さまざまなページで使用でき、一連のコントロールのコンテナーとして機能する WebUserControl クラスを提供します。これらのコントロールのイベント ハンドラーを定義すると、それらを使用しているページに関係なく適切に呼び出されます。

したがって、コントロールをシリアル化/逆シリアル化せずに WebUserControl ベースのアプローチを使用することをお勧めします。これは簡単で効果的な解決策です。

于 2012-05-31T13:04:14.180 に答える
0

後で見つけました...探していました:

if (((TextBox)c).AutoPostBack) (c as IPostBackDataHandler).RaisePostDataChangedEvent();

于 2012-07-12T06:02:16.003 に答える