更新:如果您在JavaScript設置至少一個斷點,驗證開始工作,但沒有它不工作MVC 3客戶端驗證工作間歇
更新:加入jQuery的標籤,因爲這可以連接到驗證插件
我有MVC 3版本,System.Web.Mvc
產品版本是:3.0.20105.0
修改5th of Jan 2011
- 我認爲這是最新的。
我已經注意到,客戶端驗證無法正常工作,因爲它在我們創建的應用程序想,所以我做了一個快速測試。
我創建使用互聯網應用模板基本MVC 3應用。
我添加測試控制器:
using System.Web.Mvc;
using MvcApplication3.Models;
namespace MvcApplication3.Controllers
{
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Create()
{
Sample model = new Sample();
return View(model);
}
[HttpPost]
public ActionResult Create(Sample model)
{
if(!ModelState.IsValid)
{
return View();
}
return RedirectToAction("Display");
}
public ActionResult Display()
{
Sample model = new Sample();
model.Age = 10;
model.CardNumber = "1324234";
model.Email = "[email protected]";
model.Title = "hahah";
return View(model);
}
}
}
型號:
using System.ComponentModel.DataAnnotations;
namespace MvcApplication3.Models
{
public class Sample
{
[Required]
public string Title { get; set; }
[Required]
public string Email { get; set; }
[Required]
[Range(4, 120, ErrorMessage = "Oi! Common!")]
public short Age { get; set; }
[Required]
public string CardNumber { get; set; }
}
}
而且3次:
創建:
@model MvcApplication3.Models.Sample
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Create</h2>
<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>
@*@{ Html.EnableClientValidation(); }*@
@using (Html.BeginForm()) {
@Html.ValidationSummary(false)
<fieldset>
<legend>Sample</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Age)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Age)
@Html.ValidationMessageFor(model => model.Age)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.CardNumber)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CardNumber)
@Html.ValidationMessageFor(model => model.CardNumber)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
@*<fieldset>
@Html.EditorForModel()
<p>
<input type="submit" value="Create" />
</p>
</fieldset> *@
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
顯示:
@model MvcApplication3.Models.Sample
@{
ViewBag.Title = "Display";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Display</h2>
<fieldset>
<legend>Sample</legend>
<div class="display-label">Title</div>
<div class="display-field">@Model.Title</div>
<div class="display-label">Email</div>
<div class="display-field">@Model.Email</div>
<div class="display-label">Age</div>
<div class="display-field">@Model.Age</div>
<div class="display-label">CardNumber</div>
<div class="display-field">@Model.CardNumber</div>
</fieldset>
<p>
@Html.ActionLink("Back to List", "Index")
</p>
指數:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create", "Create")
</p>
<p>
@Html.ActionLink("Display", "Display")
</p>
一切都默認在這裏 - 創建控制器,從控制器動作AddView與模型適當腳手架模板指定並使用樣本應用程序中提供的佈局。
當我會去/測試/創建在大多數情況下客戶端驗證僅適用於Title
和Age
領域,點擊創建它適用於所有領域後(創建不進入服務器)。
然而,在某些情況下(以後構建)Title
驗證是沒有工作,Email
是,或CardNumber
或Title
和CardNumber
但Email
不是。但從來沒有全部驗證一下創建前的工作。
我試着創建與Html.EditorForModel
形式以及強制執行客戶端驗證只是BeginForm前:
@{ Html.EnableClientValidation(); }
我providing a source code for this sample on dropbox - 因爲也許我們的開發ENV被打破:/我做了測試,在IE瀏覽器8和Chrome 10 beta。
以防萬一,在web配置驗證腳本已啓用:
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
所以我的問題是
有沒有一種方法,以確保客戶端驗證將工作,因爲它應該工作,不是間歇性的?
這是一個理想的行爲,我在配置/實現中丟失了一些東西?
更新:如果您在JavaScript設置至少一個斷點,驗證開始工作,但沒有它不工作
更新:加入jQuery的標籤,因爲這可以連接到驗證插件
這也發生在我身上......任何解決方案? – cecilphillip 2012-03-24 03:53:26