何らかの理由で、クライアント側の検証が機能していないようです:
これが私のhtmlです。
@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
<hr />
@Html.ValidationSummary(true)
<hr />
<p>
<label>Select Client_ID: </label>
<span class="field">
<select name="clientId" id="clientId">
@foreach (var item in Model.ClientId)
{
<option value="@item">@item</option>
}
</select>
</span>
</p>
<p>
<label>@Html.LabelFor(model => model.UserModel.name)</label>
<span class="field">
@Html.EditorFor(model => model.UserModel.name)
</span>
@Html.ValidationMessageFor(model => model.UserModel.name)
</p>
<p>
<label>@Html.LabelFor(model => model.UserModel.password)</label>
<span class="field">
@*<input name="password" id="password" type="password" />*@
@Html.EditorFor(model => model.UserModel.password)
</span>
@Html.ValidationMessageFor(model => model.UserModel.password)
</p>
<p>
<label>@Html.LabelFor(model => model.UserModel.email)</label>
<span class="field">
@*<input name="email" id="email" type="email" />*@
@Html.EditorFor(model => model.UserModel.email)
</span>
@Html.ValidationMessageFor(model => model.UserModel.email)
</p>
<p>
<label>Select: </label>
<span class="field">
<select name="accessLevel" id="accessLevel">
<option value="3">Company</option>
<option value="5">End-User</option>
</select>
</span>
</p>
<input type="submit" value="Submit" />
私のモデルは次のとおりです。
public class CreateUserModel
{
[Required]
[Display(Name = "Client_ID")]
public string clientId { get; set; }
[Required(ErrorMessage = "A name is required")]
[MaxLength(20), MinLength(2, ErrorMessage = "Name must be 2 character or more")]
[Display(Name = "Name")]
public string name { get; set; }
[Display(Name = "Email Address")]
[Required(ErrorMessage = "Email is Required")]
[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$",
ErrorMessage = "Email is not valid")]
public string email { get; set; }
[Required]
[MaxLength(20), MinLength(6, ErrorMessage = "Password Must be 6 or more chataters long")]
[Display(Name = "Password")]
public string password { get; set; }
[Required]
public int accessLevel { get; set; }
}
そして、私はwebconfigでクライアント側を有効にしています:
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
{編集}レンダリングされたhtmlを追加
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Home Page - My ASP.NET Application</title>
<link href="/Content/bootstrap.css" rel="stylesheet"/>
<link href="/Content/site.css" rel="stylesheet"/>
<script src="/Scripts/modernizr-2.6.2.js"></script>
</head>
<body>
<script src="/Scripts/jquery.validate.js"></script>
<div class="jumbotron">
<h1>Add Users to the website</h1>
</div>
<form action="/Home/Create" method="post"> <hr />
<hr />
<p>
<label for="UserModel_name">Name</label>
<span class="field">
<input type="text" name="name" />
</span>
<span class="field-validation-valid" data-valmsg-for="UserModel.name" data-valmsg-replace="true"></span>
</p>
<p>
<label for="UserModel_password">Password</label>
<span class="field">
<input name="password" id="password" type="password" />
</span>
<span class="field-validation-valid" data-valmsg-for="UserModel.password" data-valmsg-replace="true"></span>
</p>
<p>
<label for="UserModel_email">Email Address</label>
<span class="field">
<input name="email" id="email" type="email" />
</span>
<span class="field-validation-valid" data-valmsg-for="UserModel.email" data-valmsg-replace="true"></span>
</p>
<p>
<label>Select: </label>
<span class="field">
<select name="accessLevel" id="accessLevel">
<option value="3">Company</option>
<option value="5">End-User</option>
</select>
</span>
</p>
<input type="submit" value="Submit" />
</form>
<hr />
<footer>
<p>© 2014 - My ASP.NET Application</p>
</footer>
</div>
<script src="/Scripts/jquery-2.1.0.js"></script>
<script src="/Scripts/bootstrap.js"></script>
何らかの理由で、Htmlヘルパーは入力に検証属性を生成していません(data-val = "true"など)。 javascriptライブラリがロードされる順序を確認する以外に:
<script src="~/Scripts/jquery.js"></script>
<script src="~/Scripts/jquery.validation.js"></script>
<script src="~/Scripts/jquery.validation.unobtrusive.js"></script>
問題は、ファイルの下部にjQueryがあることですが、jquery.validateを上部に配置している可能性があります。 jQueryはjQuery.validateの前に来る必要があります。 jQueryは、本文ではなくヘッダーに常に配置することをお勧めします。jQueryは、modernizrの後の最初のものでなければなりません。
また、jQuery 2.xは以前のIE8鉱石では動作しないことも知っていますか?
Jquery.validate.jsの位置が間違っているようです。メインのjquery refの後でなければなりません。
MVC 5の場合、次のようになります。
_ Layout.cshtml:(ページの下部)
<body>
...
...
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/jqueryval") <!-- *required for client side validation! -->
@RenderSection("scripts", required: false)
</body>
どこ ~/bundles/jqueryval
はBundleConfig.cs:RegisterBundles()メソッドで定義されています:
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate*"));
使用する:
@Html.EditorFor
の代わりに:
<input>
そしてもちろん、jquery.validate.*
スクリプト
これを試してください:ページの下部にこのJQueryリンクバージョンをハードコーディングしているため、検証は失敗しています。スクリプトフォルダーで新しいバージョンに更新されている可能性があります。
<script src="/Scripts/jquery-2.1.0.js"></script>
必要なことは、「スクリプト」に移動して、「jquery-2.1.0.js」ファイルがあるか、JQueryを新しいバージョンに更新したかどうかを確認することだけです。新しいバージョンのファイル名が見つかった場合は入力し、再テストします。これで動作するはずです。 2017年6月現在、JQueryバージョン3.1.1を使用しています
これは私に起こり、JQueryを更新して古いバージョンが削除されたことに気付くまで、髪を引き抜いていました。それがあなたの問題だと思います。これを行っていない場合は、View Pagesに検証スクリプトを貼り付けるView Pageテンプレートに従うのではなく、代わりに単純なユーザーコントロールまたはマスターページまたはレイアウトビューページを作成し、そこにJQueryリンクを配置して、すべての人が普遍的に共有することをお勧めしますプロジェクトページ。ブラウザは最初にこれらのページを自然にキャッシュするため、他のページで使用されていなくても、再度ロードされることはありません。
これが動的にロードされているかどうかはわかりません(たとえば、Ajaxで部分ビューをロードしています)。その場合、成功時にバリデーターでhtmlを解析する必要があります。次のようなものを使用してください...
$.validator.unobtrusive.parse(".target");
例えば。
function loadAPartialView(endPoint) {
$.ajax({
url: endPoint,
type: 'GET',
cache: false,
success: function (result) {
$('.target').html(result);
$('.target').show();
// IMPORTANT. Next line is required to get the client side validation to run.
$.validator.unobtrusive.parse(".target");
$(".loadingMessage").hide();
},
error: function (result) {
// Error message...
$(".loadingMessage").hide();
}
});
};