2009-04-02 5 views
0

Ich habe Integer-Typ-Feld in der Datenbank, die Eigenschaft "Not Null" hat.Wie überprüft man den Nullwert des Integer-Felds in der ASP.NET MVC-Ansicht?

Wenn ich eine Ansicht erstellen & mache eine Validierung, wenn ich dieses Feld leer gelassen habe, wird es als 0 betrachten, also kann ich es nicht mit 0 vergleichen, denn wenn jemand einen Wert 0 eingibt, wird es als Fehler betrachtet!

ein anderes Problem ist, dass ich Modellfehler verwende, wie in dem Buch "ASP.NET MVC 1.0" @ Scott Gu Blog beschrieben. Und ich überprüfe den Wert in der partiellen Klasse des Objekts (erstellt von LINQ-To-SQL). d. h.

public partial class Person 
{ 
    public bool IsValid 
    { 
     get { return (GetRuleViolations().Count() == 0); } 
    } 
    public IEnumerable<RuleViolation> GetRuleViolations() 
    { 
     if (String.IsNullOrEmpty(Name)) 
      yield return new RuleViolation("Name is Required", "Name"); 
     if (Age == 0) 
      yield return new RuleViolation("Age is Required", "Age"); 
     yield break; 
    } 
    partial void OnValidate(ChangeAction action) 
    { 
     if (!IsValid) 
      throw new ApplicationException("Rule violations prevent saving"); 
    } 
} 

Es gibt auch ein Problem mit der Reichweite.

Wie in der Datenbank, wenn ich als smallint deklariert bin, d. H. Kurz in C#, jetzt, wenn ich diesen Bereich überschreite, dann gibt es einen Fehler wie "Ein Wert ist erforderlich".

Also gibt es endlich die beste Möglichkeit zur Validierung in ASP.NET MVC?

Antwort

1

Sie können Ihren Code mit einem NULL-fähigen Typ ändern?

Dim i As Nullable(Of Integer) 


    MsgBox(i.HasValue) 
    'result is false 

    i = 1 
    MsgBox(i.HasValue) 
    'result is true 

    i = Nothing 
    MsgBox(i.HasValue) 
    'result is false 
0

Ich bin nicht wirklich schnell mit den Details von MVC, aber gibt es keine Möglichkeit, den Standardwert von Alter auf -1 zu ändern? Auf diese Weise haben Sie einen Wert, den Sie überprüfen können, und Benutzer können weiterhin 0 eingeben.

Eine andere Lösung könnte die Verwendung eines nullable int sein. Sie können dies tun, indem Sie eine anhängen? zu dem Typ.

HTH.

Jonathan

+0

Aber wenn wir einen beliebigen Wert eingeben nicht dann beachte 0. also können wir es nicht mit -1 überprüfen. – Vikas

+0

Ich verstehe nicht, was du hier sagst. Ein Standardwert ist ein Standardwert (dh, dieser Wert sollte immer dann vorhanden sein, wenn kein Wert festgelegt wurde). Wenn Sie für den Nullable-Typ meinen, dann ist der Wert null, wenn nichts gesetzt wurde. –

0

möchte ich zunächst die Form auf dem Client validieren. Wenn das Alter 0 ist, informieren Sie den Benutzer darüber, dass es kein gültiges Alter ist. Auf dem Server die Nachricht ändert, ist es irreführend:

if (Age == 0) 
    yield return new RuleViolation("0 years is not a valid age", "Age"); 

Ich weiß, dass, weil Sie zu einem Modell Eigentum von Ihren Person Unternehmen binden es 0 als Standardwert bekommt - warum Sie nicht, dass in der Datenbank ändern dann ? Legen Sie einen Standardwert in der Datenbank auf einen Wert fest, der für das Alter des Benutzers als angemessen erachtet wird, sodass er für neue Entitäten nicht mehr als 0 angezeigt wird.

Wenn Sie die Db-Werte nicht ändern möchten, verwenden Sie jQuery, um die Textfeldwerte beim Laden in leere Strings auf der Create-Seite zu ändern. Wenn der Benutzer versucht, ein solches Formular zu senden, können Sie überprüfen, ob der Client dies nicht zulässt, und auf dem Server, auf dem Sie nichts tun müssen, erhält der Benutzer die Meldung "Ein Wert ist erforderlich" zurück.

By the way, Sie schrieb:

ich es nicht vergleichen kann mit 0, denn wenn jemand Wert einfügen 0, dann wird es als Fehler angesehen werden

ich nicht ein Problem in diesem bestimmten Domänenmodell sehen. Denkst du, dass das Alter von 0 ein guter Wert ist oder nicht? Frag dich selbst.

0

Scheck mit Utilities.GetNullableInt32(textbox1.Text.Trim());

wenn u mit dieser GetNullableInt32() Funktion überprüfen, ob der Benutzer eingegebene Wert ‚0‘ als NUll in der Tabelle gespeichert werden

Verwandte Themen