0

私はこのコードを持っています

かみそりのページ:

            <div class="editor-label">
              @Html.LabelFor(model => model.Citizenship)
            </div>
            <div class="editor-field">
              @Html.EnumDropDownListFor(model => model.Citizenship)
              @Html.ValidationMessageFor(model => model.Citizenship)
            </div>

モデル:

[DisplayName("Гражданство")]
[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "Required")]
public CitizenshipEnum? Citizenship { get; set; }

最後に、次の HTML を取得しました。

<select data-val="true" data-val-required="Пожалуйста, укажите значение" id="Citizenship" name="Citizenship"><option value=""></option>
<option value="RF">Российская Федерация</option>
<option value="other">другое государство</option>
</select>

これの検証の何が問題になっていますか? unobtrusive.js およびその他の必要なスクリプトが確実に読み込まれます (その他の入力による検証は正常に機能します)

カスタムルールを追加してこの問題を解決しようとしています

このように、しかしそれは動作しません:

$(function () {
  $.validator.addMethod('selectNone', function (value, element) { debugger; return $(element).val(); }, "Please select an option");

  $("form").validate({
    rules: {
      '#Citizenship': {
        selectNone: true
      }
    }
  });
};
4

2 に答える 2

5

私は今同じ問題を抱えていました。ドロップダウンリストから項目が選択されていない場合、enum は 0 値を取得します。jquery バリデーターの場合は適切な値であるため、検証に合格します。

したがって、列挙型の範囲検証属性を追加しました。

[Range(1, int.MaxValue)]
[EnumDataType(typeof(Priority))]
public Priority Priority { get; set; }

その後、jquery の検証は思い通りに機能しました。

注: [EnumDataType] 属性を追加することにより、項目が選択されていない場合、コントローラーで ModelState が無効になるため、コントローラーでの検証に使用できます。

于 2015-11-26T14:43:43.037 に答える
0

コントローラーで:

    [HttpPost]
    [Authorize]
    public ActionResult Edit ( ClassOfModel model )
    {
        if ( ModelState.IsValid )
        {
            if ( model.Citizenship == null )
            {
                ModelState.AddModelError( "Citizenship", "Пожалуйста, укажите значение" );
            }
            // Do something (e.g. save data)
        }
        return View( model );
    }
于 2012-09-06T17:47:17.813 に答える