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屬性:(

回答

3

你忘了使用form。環繞你的字段集與Html.BeginForm

<div id="options-form"> 
@using (Html.BeginForm()) { 
    @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> 

這將初始化FormContext,你的投入將收到的數據val- *屬性驗證

+0

看來我不得不專門使用Html.BeginForm(),剛剛進入一個

標籤自己有沒有效果。謝謝! – aknuds1

+2

如果您使用手動表單標記,則還必須手動初始化FormContext。 @ { ViewContext.FormContext = new FormContext(); } – archil