Я пытаюсь использовать проверку на стороне клиента на очень простом примере, и она не работает.Я начал с существующего примера из Интернета.
Вот оно (см. Принятый ответ): Ненавязчивая пользовательская проверка ASP .Net MVC 3
В основном, он используетэтот блог как решение: 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 и отправляю сообщение, в моем контроллере достигается точка останова (после действия) >> Я пришел к выводу, что проверка клиента никогда не используется.
Я не понял, потому что начал сбазовый пример (проверка кредитной карты), и я знаю, что проверка кредитной карты работает в проверке клиента (я проверял это в другом решении).
Я немного потерян.
Есть идеи, почему проверка клиента не сработала?
Спасибо.
ОБНОВЛЕНИЕ
После длительного поиска я вижу, чтонекоторые люди говорят, что нам нужна функция 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, она работает, но мне кажется странным, что в примере карты Creait нетФункция JavaScript в представлении для проверки кредитной карты!
Я все еще потерян.