3
我試圖在我的ASP.NET MVC 3項目中集成不顯眼的客戶端驗證,按照Brad Wilson's recipe。但是,它在渲染視圖中未啓用。例如,我的<input>
元素(即編輯器字段)未按規定收到data-val
屬性。爲什麼ASP.NET MVC 3在這種情況下不支持客戶端驗證?
我做了以下,以使不顯眼的客戶端驗證:
Web.config
:
<configuration>
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
</configuration>
Options.cs
:
public class Options
{
// Annotate with validation rules, in order to generate client-side validation code
[Required, StringLength(60)]
public string Bugs = "";
}
_Layout.cshtml
:
<head>
<script src="@Url.Content("~/Scripts/jquery-1.6.2.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
</head>
Options.cshtml
:
@model MyProject.Models.Options
<div id="options-form">
@Html.ValidationSummary(true)
<fieldset>
<legend>Options</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Bugs)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Bugs)
@Html.ValidationMessageFor(model => model.Bugs)
</div>
</fieldset>
</div>
這個HTML獲取編輯器領域中產生:
<div class="editor-label">
<label for="Bugs">Bugs</label>
</div>
<div class="editor-field">
<input class="text-box single-line" id="Bugs" name="Bugs" type="text" value="" />
正如你所看到的,沒有data-val
屬性:(
看來我不得不專門使用Html.BeginForm(),剛剛進入一個
如果您使用手動表單標記,則還必須手動初始化FormContext。 @ { ViewContext.FormContext = new FormContext(); } – archil