0

私が得ていない基本的なMVCの部分があるようです。状況は次のとおりです。

3 つの部分ビュー (1 つはテーブル、2 つはそれぞれ 1 つのフォーム) を持つビュー (Index.aspx) があります。

4 つのビューはすべて厳密に型指定されています。親 (index.aspx) には、モデルとして部分ビューに渡される 3 つのプロパティを含むモデルがあります。

部分ビュー (ユーザーがテーブルの新しいレコードを作成できるフォーム) のいずれかのモデルの 1 つには、フォームが送信されたときに検証を有効にするための DataAnnotations があります。2 つのフォーム フィールドは RangeAttribute[Range(1000,9999)]を持つ整数で、2 つのフォーム フィールドは DisplayFormatAttribute を持つ DateTime です。[DisplayFormat(DataFormatString = "{0:dd/MMM/yyyy}")]

私の部分的なビューは、次のように入力フィールドに Html.EditorFor() ヘルパーを使用します。

<%: Html.EditorFor<MyType, DateTime>(m => m.StartDate, new { @class = "specialclass" })%>

私のアクション メソッドでは、親のビュー モデルを作成し、パーシャル (レコードが入力されたテーブルを除く) の空のビュー モデルも追加し、それを return View() ステートメントに渡します。テーブルにデータが入力されることを除いて、フォーム フィールドは空である必要がありますが、そうではありません。

では、ビューに対して HTTP get を実行すると、フォーム フィールドの 2 つの整数フィールドに 0 が入力され、2 つの日付フィールドに最小日付値が入力されるのはなぜですか?

私は何を間違っていますか/何が得られませんか?

私の質問は次のとおりだと思います:フォームである強く型付けされたユーザーコントロールがある場合、親ビューに対してhttp getを実行するときに、それをどのように「処理」する必要がありますか? モデルを渡す必要がありますよね?

4

1 に答える 1

0

値を設定するかどうかに関係なく、システムは値を提示しようとします。int は null 許容ではないため、初期化されていない場合は 0 を返す傾向があるため、クリアされます。私が想定している DateTime は、null になるため、デフォルトで DateTime.Min に設定されています。これは、フィールドとフォーマットの両方でデータが存在すると予想されることを指定したためです。

于 2011-02-04T16:54:27.953 に答える