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