Ich versuche, die clientseitige Validierung in einem sehr einfachen Beispiel zu verwenden, und es funktioniert nicht. Ich ging von einem bestehenden Beispiel aus dem Internet aus.Client Validierung funktioniert nicht an einem sehr einfachen Beispiel
Hier ist (siehe akzeptierte Antwort): ASP .Net MVC 3 unobtrusive custom client validation
Im Grunde ist es nutzt diesen Blog als Lösung: http://benjii.me/2010/11/credit-card-validator-attribute-for-asp-net-mvc-3/
Also habe ich aus einer leeren Lösung gestartet und würde validieren möchten, dass ein Preis größer als ein Minimum.
My Controller:
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");
}
}
Meine Ansicht Modell:
public class MinPriceViewModel
{
[MinPrice(MinPrice=9.99)]
[Required]
public double Price { get; set; }
}
Das Attribut für die Validierung (Client-Server &):
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"
};
}
}
Die Ansicht:
@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 />
}
Ich habe einen Breakpoint auf meiner Post-Aktion in meinem Controller platziert, um zu überprüfen, ob die Client- oder Servervalidierung stattgefunden hat. Wenn ich die Lösung leite und ich 1 gebe und abschicke, ist der Haltepunkt in meinem Controller erreicht (Post-Aktion) >> Ich kam zu dem Schluss, dass die Client-Validierung niemals verwendet wird.
Ich habe nicht verstanden, weil ich von dem grundlegenden Beispiel (Kreditkartenvalidierung) begann und ich weiß, dass diese Kreditkartenvalidierung in Client Validierung funktioniert (ich testete es in einer anderen Lösung).
Ich bin ein bisschen verloren.
Eine Idee, warum die Client-Validierung nicht funktioniert hat?
Danke.
UPDATE
Nach vielen googeln, sehe ich, dass einige Leute sagen wir eine Javascript-Funktion für die Client-Validierung wie diese benötigen:
jQuery.validator.addMethod("minprice", function (value, element, param) {
// Perform tests here for client validation
return (value>10);
});
jQuery.validator.unobtrusive.adapters.addBool('minprice');
Als ich mit diesem hinzugefügt testen JavaScript-Funktion funktioniert, aber es scheint mir seltsam, dass die creait-Karte Beispiel keine JavaScript-Funktion in der Ansicht für die Überprüfung der Kreditkarte hat !!
Ich bin immer noch verloren.
Yuo haben Recht. Ich wusste es nicht. Danke. – Bronzato
Das funktioniert, aber wenn sich der Mindestpreis ändert, brauchen Sie einen Programmierer, um den Code zu ändern. Dies ist eine Marketingregel und sollte dynamisch und von Nicht-Programmierern geändert werden, ohne dass die Anwendung neu erstellt oder neu implementiert werden muss. – RickAndMSFT