4

フォームを含むMVCビューがあり、特定のテキストフィールドに入力されたデータを検証する必要があります。空白がないことを確認する必要があります。誰かが私のビューでjquery/ajaxスクリプトを使用したフォーム検証の例を教えてもらえますか?

4

3 に答える 3

4

検証をビューモデルの一部に組み込んで、モデルに次のようなものを含めることをお勧めします。

[RegularExpression(@"^[\S]*$", ErrorMessage = "White space found")]
public string MyField {get;set;}

次に、ビューで次の操作を実行できます。

@Html.TextBoxFor(model => Model.MyField , new { })
@Html.ValidationMessageFor(model => Model.MyField)

クライアント側を機能させるには、クライアント側の検証と控えめなJSを有効にする必要があります。これ<appSettings>は、メインのセクションで次のように設定することで実行できます。web.config

<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>

jquery.validate.jsまた、jquery.validate.unobtrusive.jsファイルをページに取り込む必要があります。MVC3で新しいプロジェクトを作成するときは、両方をscriptsフォルダーにバンドルする必要があります。

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

最後に、サーバー側のアクションメソッドでは、次のようなものが必要になります。

    [HttpPost]
    public ActionResult Index(Thing myThing) {

        if (ModelState.IsValid) {
            //Do some work in here because we're all good
            return RedirectToAction("MyOtherAction");
        }

        //Oops the validation failed so drop back to the view we came from
        return View();
    }

クライアント側のJSに完全に依存することは、理論的にはバイパスしてサーバー側にデータが破損する可能性があるため、危険です。

上記の正規表現は必要な検証を行う必要がありますが、私の正規表現のスキルは少し錆びています。

于 2012-07-18T15:12:49.680 に答える
0

モデル検証の一環として、空白をチェックすることをお勧めします。この目的のための単純で再利用可能な検証属性は、次のようになります。

public class NoWhiteSpaceAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        var strValue = value as string;
        if (!string.IsNullOrEmpty(strValue))
        {
            return !strValue.Contains(" ");
        }

        return true;
    }
}

使用例:

[NoWhiteSpace(ErrorMessage = "No spaces allowed")]
public string UserName { get; set; }
于 2012-07-18T15:28:29.740 に答える
0

ここでこのコードを見つけました:

$(document).ready(function(){

  jQuery.validator.addMethod("noSpace", function(value, element) { 
  return value.indexOf(" ") < 0 && value != ""; 
}, "No space please and don't leave it empty");


$("form").validate({
   rules: {
      name: {
          noSpace: true
      }
   }
  });


})
于 2012-07-18T15:02:30.080 に答える