ASP.NET MVC3 Validierung trotz int?
-
Dienstag, 12. März 2013 09:58
Hallo,
ich habe eine kleine Anwendung mit ASP.NET MVC3.
Meine Modell Klasse sieht folgendermaßen aus:
public class Einkauf { public int Id { get; set; } [Required(ErrorMessage = "Bezeichnung muss angegeben werden")] public string Bezeichnung { get; set; } [Required(ErrorMessage = "Preis muss angegeben werden")] [Range(0.01, 99.99, ErrorMessage = "Preis muss zwischen 0,01 und 99,99 liegen")] public decimal Preis { get; set; } public int? Anzahl { get; set; } }Mein Create.aspx lautet
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<EinkaufszettelMVC.Models.Einkauf>" %> <!DOCTYPE html> <html> <head runat="server"> <title>Create</title> </head> <body> <script src="<%: Url.Content("~/Scripts/jquery-1.7.1.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> <script src="<%: Url.Content("~/Scripts/globalize.js") %>" type="text/javascript"></script> <script src="<%: Url.Content("~/Scripts/globalize.culture.de-DE.js") %>" type="text/javascript"></script> <script type="text/javascript"> $.validator.methods.number = function (value, element) { return !isNaN(Globalize.parseFloat(value)); } $.validator.methods.range = function (value, element, param) { return Globalize.parseFloat(value) >= param[0] && Globalize.parseFloat(value) <= param[1]; } $(document).ready(function () { Globalize.culture('de-DE'); }); </script> <% using (Html.BeginForm()) { %> <%: Html.ValidationSummary(true) %> <fieldset> <legend>Einkauf</legend> <div class="editor-label"> <%: Html.LabelFor(model => model.Bezeichnung) %> </div> <div class="editor-field"> <%: Html.EditorFor(model => model.Bezeichnung) %> <%: Html.ValidationMessageFor(model => model.Bezeichnung) %> </div> <div class="editor-label"> <%: Html.LabelFor(model => model.Preis) %> </div> <div class="editor-field"> <%: Html.EditorFor(model => model.Preis) %> <%: Html.ValidationMessageFor(model => model.Preis) %> </div> <div class="editor-label"> <%: Html.LabelFor(model => model.Anzahl) %> </div> <div class="editor-field"> <%: Html.EditorFor(model => model.Anzahl) %> <%: Html.ValidationMessageFor(model => model.Anzahl) %> </div> <p> <input type="submit" value="Create" /> </p> </fieldset> <% } %> <div> <%: Html.ActionLink("Back to List", "Index") %> </div> </body> </html>Obwohl in meiner Modell Klasse das int Feld Anzahl mit int? definiert ist, bekomme ich die Meldung "Das Feld "Anzahl" muss eine Zahl sein.", wenn ich das Feld leer lasse.
Was muss ich noch tun, damit das Feld Anzahl optional wird?
Walter
Walter Taus
Alle Antworten
-
Dienstag, 12. März 2013 11:18
Hallo Walter,
Schau Dir mal folgenden Link an.
http://stackoverflow.com/questions/7249665/error-assigning-null-to-a-nullable-int-the-value-null-is-not-valid-for-prop
Dort wird als Resultat
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false
dieser Eintrag in der APP_Start Methode hinzugefügt.HTH
Güße Alexander
-
Dienstag, 12. März 2013 11:52
Hallo Alexander,
auch trotz Eintrag in Application_Start habe ich den Fehler nach wie vor.
Grüße Walter
Walter Taus
-
Mittwoch, 13. März 2013 09:23
Hallo,
Lösung gefunden. Die $.validator.methods.number muss auf optional überprüfen. Korrekte Version lautet:
<script type="text/javascript"> $.validator.methods.number = function (value, element) { return this.optional(element) || !isNaN(Globalize.parseFloat(value)); } $.validator.methods.range = function (value, element, param) { return this.optional(element) || Globalize.parseFloat(value) >= param[0] && Globalize.parseFloat(value) <= param[1]; } $(document).ready(function () { Globalize.culture('de-DE'); });Walter Taus
- Als Antwort markiert WalterTaus Mittwoch, 13. März 2013 09:23

