私は長い間バックエンド .Net 開発者であり、Web アプリケーション開発は初めてです。私は MVC 4、Razor、EF 5 を使用しており、これらのツールを使用して日常的な DB 駆動型 MVC 4 サイトを作成する方法について基本的な理解があります。
ワークフロー シナリオ用のカスタム フォーム機能を作成する必要があります。コード ファースト スキーマ全体を設計し、さまざまなフォームフィールド タイプとフォーム値タイプのクラスを作成しました。
ビューに渡されるモデルは、フォーム フィールドの仕様を含むフォーム値のリストを持つフォーム クラスになります。そのため、ビューはフォーム フィールドを繰り返し処理し、使用するエディターを動的に選択する必要があります。
私の問題は、これにより、クライアント側の検証にデータ注釈を使用できなくなることです。そして、カスタム検証に関するアドバイスを見つけたすべての場所では、すべてのフィールドがクラスのメンバーであることを前提としています (驚くべきことではありません)。一方、この場合、すべてのフィールドがリストにあります。
私の目標は、ビューが単に注釈付きのクラスにバインドされている場合に通常表示されるように、各フィールドに検証メッセージと検証の概要を表示することです。
これにアプローチする方法について何か提案はありますか? 前もって感謝します。
次のようなビュー ロジックを想像してください。
@foreach (var fieldvalue in Model.FormFieldValues) {
// Logic that chooses the appropriate editor based on typeof(fieldvalue.FormField)
// Binds the editor to fieldvalue.Value
// Validation specs are contained in the Formfield obtained by fieldValue.FormField
// And my problem is setting up the validation without the aid of the normal method
// of data annotation or class level custom validation.
}
fieldvalue クラスは次のようになります。
public class FormFieldValue : EboEntity
{
public string Value { get; set; }
[Required]
public int FormFieldId { get; set; }
[Required]
public virtual FormField FormField { get; set; }
[Required]
public int FormId { get; set; }
[Required]
public virtual Form Form { get; set; }
}
また、FormField オブジェクトには、フィールドの種類に応じて、Required、Maxlength などのフィールドがあるとします (つまり、FormFieldText は FormField のサブクラスになります)。
答え:
わかりました、私が MVC の初心者であることがわかります。
私の質問への答えは、特定のエディターが検証を制御できる htmlAttributes を取るということです。したがって、フォームフィールドの 1 つが stringlenth(10) の必須テキストフィールドである場合、次のようにエディターを呼び出すことができます。
<div class="editor-field">
@Html.TextBoxFor(model => model.NoTexty, new {
required = true,
maxlength = 10,
placeholder = "Texty"})
@Html.ValidationMessageFor(model => model.NoTexty)
</div>
しかし、私の場合、htmlAddtributes はハードコーディングされず、formvalue.FormField オブジェクトのフィールドから取得されます。
これで誰かの時間を無駄にした場合は申し訳ありません。しかし、私のような他の初心者のために、これをここに残しておきます。