2

私はjavascriptの控えめな検証を使用しています。いくつかのフォームで再利用しているビューモデルがあります。一部のフォームでは、ビューモデルのいくつかのプロパティが必要です。他の形式では、そうすべきではありません。これを達成できるように、プログラムでプロパティに[必須]を設定する方法はありますか?

ありがとう!

4

4 に答える 4

8

これらはコンパイル時に実装され、動的に追加できないため、DataAnnotations を使用して行うことはできません。次のいずれかを実行できます

適切な注釈を持つさまざまなビュー モデルを作成する

また

ビューモデルを送信して、モデルの元のアクションに基づいてモデルをチェックし、モデルの状態に追加できる検証エラーのリストを返すサービスを用意します。

また

などの ViewModel にプロパティを配置し、string IsBeingUsedForそれを RequiredIf DataAnnotation と組み合わせて使用​​します。 以下は、条件付き DataAnnotations を使用するビルド済みのライブラリの例です。[RequireIf("IsBeingUsedFor", "Action_A")] と言うことができます。

これらは必ずしもすべてのオプションではありませんが、よりクリーンなオプションの一部です。これはすべて JavaScript で行うことができますが、「悪い人」がフォームを送信してクライアント側の検証をバイパスすると、サーバー側の検証が失われ、アプリケーションに穴が開く可能性があります。

于 2012-04-07T18:45:27.903 に答える
3

データ注釈でこれを行う方法がわかりません。ただし、ビューでは、必要なルールを JavaScript で追加/削除できます。

$("#myProperty").rules("add", { required: true });

また

$("#myProperty").rules("remove", "required");
于 2012-04-07T18:45:08.210 に答える
2

属性は実行時にリフレクションを介してアクセスされるため、必要なときにオンとオフを切り替えることができることを認識していません。私のアドバイスは、「必須」ViewModel と「NotRequired」ビューモデルを作成することです。これはおそらくあなたが望むものだと思いますが、私が考えることができる最も簡単な方法です。

于 2012-04-07T18:45:29.920 に答える
0

クライアント側の検証で十分な場合は、Razor ビューで次の操作を実行できます。たとえば、次のようになります。

    @Html.LabelFor(model => model.title, new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @if (Model.IsTitleRequired == true)
        {
            @Html.TextBoxFor(model => model.title, new { @required = true })
        }
        else
        {
            @Html.TextBoxFor(model => model.title)
        }
        @Html.ValidationMessageFor(model => model.title)
    </div>
于 2017-08-01T17:21:21.230 に答える