我嘗試在一個非常簡單的例子上使用客戶端驗證,它不起作用。我從一個來自互聯網的現有例子開始。客戶端驗證沒有在一個非常簡單的例子上工作
這是(見接受的答案):ASP .Net MVC 3 unobtrusive custom client validation
基本上,它使用這個博客作爲解決方案:http://benjii.me/2010/11/credit-card-validator-attribute-for-asp-net-mvc-3/
所以我從一個空白的解決方案開始,想驗證一個價格高於最低限度。
我的控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(MinPriceViewModel model)
{
if (!ModelState.IsValid)
return View(model);
return Content("Thank you very much");
}
}
我的視圖模型:
public class MinPriceViewModel
{
[MinPrice(MinPrice=9.99)]
[Required]
public double Price { get; set; }
}
進行驗證的屬性(客戶機服務器&):
public class MinPriceAttribute : ValidationAttribute, IClientValidatable
{
public double MinPrice { get; set; }
public override bool IsValid(object value)
{
if (value == null)
return true;
var price = Convert.ToDouble(value);
if (price < MinPrice)
{
return false;
}
return true;
}
public override string FormatErrorMessage(string name)
{
return "Attention le champ " + name + " ne contient pas un prix acceptable.";
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = this.ErrorMessage,
ValidationType = "minprice"
};
}
}
的視圖:
@model MinPriceValidation.Models.MinPriceViewModel
@{
ViewBag.Title = "Home Page";
}
<script src="../../Scripts/jquery.validate.js" type="text/javascript"></script>
<script src="../../Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
jQuery.validator.unobtrusive.adapters.addBool('minprice');
});
</script>
@using(Html.BeginForm())
{
@Html.LabelFor(m => m.Price)
@Html.TextBoxFor(m => m.Price)
@Html.ValidationMessageFor(m => m.Price)
<input type = submit />
}
我在我的控制器的後置操作中放置了一個斷點,以檢查是否發生了客戶端或服務器驗證。當我運行解決方案並輸入1並提交時,在我的控制器中達到了斷點(發佈後操作)>>我的結論是客戶端驗證從不使用。
我不明白,因爲我從基本的例子(信用卡驗證)開始,並且我知道這個信用卡驗證在客戶端驗證(我在另一個解決方案中測試過)中起作用。
我有點失落。
任何想法爲什麼客戶端驗證不起作用?
謝謝。
UPDATE
google搜索了很多之後,我看到一些人告訴我們需要一個JavaScript函數的客戶端驗證這樣的:
jQuery.validator.addMethod("minprice", function (value, element, param) {
// Perform tests here for client validation
return (value>10);
});
jQuery.validator.unobtrusive.adapters.addBool('minprice');
當我與這個加考JavaScript函數它的工作原理,但我覺得奇怪的是,創意卡的例子沒有在視圖中檢查信用卡的任何JavaScript函數!
我仍然迷路。
Yuo是對的。我不知道。謝謝。 – Bronzato 2012-03-25 08:48:29
這有效,但當最低價格發生變化時,您需要程序員更改代碼。這是一個營銷規則,應該是動態的,並且在沒有重建/重新部署應用程序的情況下由非程序員改變。 – RickAndMSFT 2012-03-25 16:52:22