0

現在開発中の Web サイトでは、動的に構築されたフォームを表示できます。

formで構成さfieldsれ、ユーザーが直接作成し、サポートされている複数のタイプ (テキスト ボックス、リスト ボックス、ティックボックス、ラジオボタン リストなど) の 1 つとして表示できます。レンダリング ロジックはrepeater、ユーザーが定義したすべてのフィールドのコレクションを反復処理する を使用します。

リピーターの内部 (aspx ページで直接) では、サポートする各型の 1 つのインスタンスが定義されています。

<asp:Repeater ID="fieldRepeater" runat="server">
    <ItemTemplate>
        <asp:TextBox ID="textBox" runat="server" />
        <asp:DropDownList ID="dropDownList" runat="server" />
        <asp:CheckBox ID="checkBox" runat="server" />
        <asp:RadioButtonList ID="radioButtonList" runat="server" />
        [...]
    </ItemTemplate>
</asp:Repeater>

ロード中に、どのコントロールが必要かを判断し、他のすべてのコントロールを積極的に非表示にします。

Web ベースの開発の世界ではまだ新しいので、このアプローチは私には非常に奇妙に思えます。私の直感では、UI をクリーンに保ち、CodeBehind で必要なコントロールを正確にインスタンス化して、可視性で「再生」を開始しないことを好みますが、現在のアプローチには明らかな利点もあります。

それは本当にWebアプリでそれを行う方法ですか? ここにいくつかのベストプラクティスはありますか?

ありがとう!

4

1 に答える 1

0

ここでのベストプラクティスが何であるかはわかりませんが、以前のプロジェクトで同様のことを行い、両方のアプローチを試しました. どちらも機能します。

コード ビハインドでコントロールを作成するのは、特にポストバックを処理する必要がある場合は面倒です。コントロールは OnInit で作成する必要があります。そうしないと、ポストされたフォーム値とビューステートが取り込まれません。コントロールの作成のいずれかが他のコントロールの値に基づいている場合、投稿されたフォームの値を手動で掘り下げないと値がわからないため、これにより複雑になります。

私が考えることができる現在のアプローチの唯一の実用的な欠点は、4 つのコントロール (TextBox、DropDownList など) すべてをインスタンス化し、ASP.Net によってサーバー側で処理する必要があることです。これはリソースの無駄です。しかし、それはおそらくそれほど重要ではありません。たぶん、プロファイリングを行って確認してください。少し奇妙に思えることに同意しますが、あまり「きれい」ではありません。

あなたが Web 開発に不慣れだと言ったように、すべてのコントロールを含め、無関係なものを隠すという現在のアプローチを続けることをお勧めします。見た目は良くないかもしれませんが、やってみるともっと簡単だと思いました。

幸運を!

于 2012-05-29T14:52:19.343 に答える