9

これらの要件を満たすASP.NETMVCビューで動的フォームをレンダリングする作業を行っています。

  • フィールドを検証できます
  • フォームが無効な場合、状態は保持されます

これを実現するために、カスタムモデルバインダーの作成を検討しています。私は一般的にこれを行うことを計画しています:

  1. フォームフィールドはこれらのプロパティで定義されます
    • プロンプト(フィールドの横のラベル)
    • タイプ(テキスト、チェックボックスリスト、ラジオリストなど)
    • 選択肢(リストフィールド用)
    • 必要とされている
    • RegularExpression(テキストフィールド用)
    • 表示オプション
    • フィールド定義のコレクションがコントローラーからビューに送信されます
    • フィールドはHTMLにレンダリングされ、ブラウザに送信されます
    • フォームがサーバーに返送されます
    • カスタムモデルバインダーは、フォームをフィールド定義のコレクションにバインドします。このコレクションには、送信された値が含まれています。
    • 各フィールドが検証されます
    • 必要に応じて->値が必要
    • RegEx->が一致する必要がある場合
    • 無効なフィールドごとに、エラーメッセージがmodelstateに追加されます
    • コントローラーが何をするかを決定します
    • すべてのフィールドが有効な場合
      • フィールドとその値を使って何でもします
    • 1つ以上のフィールドが無効な場合
      • フィールドのコレクションをビューに送り返します
      • 以前に試行した値を使用して、フィールドを再度レンダリングします
      • 検証の概要を表示する

これを最善の方法で行っているのか、最も簡単な方法で行っているのかわかりません。このアプローチは私に多くの問題を与えますか、それともうまくいきますか?それを改善するために何ができますか?

4

4 に答える 4

8

私は、基本的に私の質問の擬似コードが説明していることを正確に実行するクラスライブラリを作成しました。それは素晴らしい働きをします。

編集:

私はついにクラスライブラリのクリーンアップに取り掛かりました。私はいくつかの新機能を追加し、かなりよく文書化されたデモWebアプリケーションを作成しました。

これらはすべて、ここCodePlexでホストされています。これが誰かに役立つことを願っています。

于 2009-09-16T18:48:31.093 に答える
0

私は決して専門家ではありませんが、ASP.NET MVCを初めて使用する場合は、組み込みの機能から始めてから、独自の機能を使用することをお勧めします。これは、ビューの仕事であるため、コントローラーでUIを定義/構築することを推奨しないことを除いて、説明したことのほとんどを実行します。

ModelStateDictionaryを使用すると、モデルエラーを追加し、モデル値を設定できます。これらの値は、検証が失敗したときにフォーム入力にバインドされます。

更新:別の見方:従来のASP.NET構築手法よりもMVCを使用している理由を自問し、提案されたアプローチがそれらの理由と一致するかどうかを確認します。私にとって、関心の分離は大きな理由であり、生成されたHTMLをきめ細かく制御することでもあり、あなたのアプローチがそれらを覆す可能性があると感じています。

特に編集に対処するには:

ステップ1からスルーはMVCパラダイムに反します。ステップ4、結構です。ステップ5から7は、ほぼ標準的なMVCプラクティスであり、フレームワークによって完全にサポートされています。たとえば、Simple Validation(C#)の実行は、検証とエラーメッセージの表示の例を示しています。

于 2009-06-24T19:42:29.413 に答える
0

フィールド定義はどの程度動的ですか? それらがあまり頻繁に変更されない場合は、定義が作成されたらコード DOM を使用してモデルとコントローラーを生成できます。ASP.NET MVC でこれを試したことはありませんが、良い方法かもしれません。

http://msdn.microsoft.com/en-us/library/y2k85ax6.aspx

この記事では、ActionLink の生成に code dom を使用します。

http://blogs.msdn.com/davidebb/archive/2009/06/01/a-buildprovider-to-simplify-your-asp-net-mvc-action-links.aspx#comments

于 2009-06-24T21:50:06.487 に答える