Frage

Ich DataAnnotations mit Attributen meine Modellobjekte zu validieren. Mein Modell Klasse sieht wie folgt aus:

public class MyModel
{
    [Required]
    public string Title { get; set; }

    [Required(ErrorMessage = "At least one editor is required.")]
    public List<User> Editors { get; set; }
}

public class User
{
    public int Id { get; set; }

    [Required]
    public string FullName { get; set; }

    [Required]
    [DataType(DataType.Email)]
    public string Email { get; set; }
}

Meine Controller-Aktion aussieht wie:

public ActionResult NewItem(MyModel data)
{
    if (!this.Model.IsValid)
    {
        // invalid processing
    }
    // valid processing
}

Der Nutzer ist mit Blick präsentiert, die eine Form hat, mit:

  • ein Textfeld mit Dummy-Namen in dem Benutzer Benutzer-Namen eingeben. Für jeden Benutzer sie eingeben, da ein Client-Skript ist mit Ajax gekoppelt, die einen <input type="hidden" name="Editors[0].Id" value="userId" /> für jeden Benutzer (Aufzählung Index ist daher nicht immer 0, wie hier geschrieben), so Standardmodell Bindemittel in der Lage ist, zu konsumieren und binden Sie das Formular ohne Probleme eingegeben schafft.
  • ein Textfeld, in dem Benutzer den Titel
  • eingeben

Da bin ich mit Asp.net MVC 2 RTM die Modellvalidierung hat statt der Eingabevalidierung ich weiß nicht, wie Validierungsfehler zu vermeiden. Und da Benutzer User.Id bieten, die gesamte User Objektinstanz überprüft wird. Welche stört mich nicht, wie lange ich weiß, wie andere Eigenschaften Validierung auszuschließen.

Die Sache ist, ich habe BindAttribute auf meiner Controller-Aktion zu verwenden. Ich würde entweder ein weißes oder eine schwarze Liste von Eigenschaften zu bieten. Es ist immer eine bessere Praxis eine weiße Liste zu liefern. Es ist auch zukunftssicher.

Das Problem

Meine Form funktioniert gut, aber ich Validierungsfehler über Benutzer FullName und Email Eigenschaften, da sie nicht vorgesehen sind. Ich sollte auch nicht füttern sie an den Client (über Ajax, wenn der Benutzer Benutzerdaten eingibt), weil E-Mail persönliche Kontaktdaten und wird nicht geteilt zwischen den Nutzern.

Wenn es nur ein einzelner Benutzer Bezug auf MyModel würde ich schreiben

[Bind(Include = "Title, Editor.Id")]

Aber ich eine Aufzählung von ihnen haben. Wie stelle ich Bind weiße Liste mit meinem Modell?

Eine mögliche Lösung

Ich könnte eine separate Ansicht Modell für User schaffen, nur um MyModel Objekte einzugeben. Ich würde Attribut tatsächliche Validierung setzen und omit Eigenschaften braucht mich nicht.

public class MyModelUser
{
    [Required]
    public int Id { get; set; }
}
War es hilfreich?

Lösung

ich am Ende eines separate Ansicht Modell (wie beschrieben in Eine mögliche Lösung in meiner Frage), das vollständig validiert werden kann. Es ist eine Abhilfe und ich würde noch gerne wissen, wie es richtig zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top