2

これは非常に基本的なシナリオのように思えますが、ハッピーエンドではないと思います。

私は単純なプロジェクトクラスを持っています:

public class Project 
{

    [Required(ErrorMessage = "Project title is required")]
    [DisplayName("Project Title")]
    public string Title { get; set; }

    [DisplayName("Related Categories")]
    public Category Categories { get; set; }

}

関連するカテゴリが少なくとも 1 つ選択されていることを確認します。Html.EnableClientValidation() とモデルのデコレータを使用して、ビューでこれを検証するにはどうすればよいですか? これが不可能な場合、フォールバックは何ですか?

同様に苛立たしく、おそらく検証の障害は、私ができないことです...

<%= Html.ListBoxFor(m => m.Project.Categories,
                new SelectList(Model.Categories, "Id", "Name"))%>

...これは、Project.Categories フォームの値 (文字列配列) をカテゴリ型であるべきものに関連付けようとするためですが、できません (エラー「型 'System.String からのパラメーター変換' 型コンバーターがこれらの型間で変換できないため、型への変換に失敗しました")。したがって、フォーム名を m.Categories のような名前に変更して、Product クラスとの関連付けを解除する必要があります。

うわー、私にはこれはクレイジーです。MVC2 デコレータを使用して、単純な複数選択リストを検証できませんか?

4

1 に答える 1

1

これが私が今していることなので、私は答えを試みるつもりです:

私のビューモデルでは、次のように記述します。

    [Required(ErrorMessage = "A category is required")]
    public IEnumerable<Category> Categories { get; set; }

そして、検証はUIで行われます。ただし、modelstateはまだアクションで無効として表示されません...バインディングの名前が正確に一致していないため、このアプローチは確かに現状ではあまりしっかりしていませんが、解決できると思います。

また、これは、おそらく1:1のAction:ViewModel関係を使用することについての興味深い点につながります。そうすることで、ビューモデルでビュー固有の検証を設定できます。これは、MVC 2が最終リリースに向けて進む方向である、より広範なモデル検証の一部となる検証エンティティに依存することとは異なります。

関連性:

MVC 2 RC 2でのモデル検証:http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

1:1ビューモデル:アクションアプローチ:http ://www.lostechies.com/blogs/jimmy_bogard/archive/2009/06/29/how-we-do-mvc-view-models.aspx

于 2010-03-03T15:47:32.543 に答える