2009-06-18 18 views
0

Ich versuche, die Validierungsnachrichten in ASP.Net MVC in den Griff zu bekommen. Ich habe die folgende AnsichtASP.Net MVC und Validierungsnachrichten

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Create User</h2> 

    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %> 

    <% using (Html.BeginForm()) {%> 

     <fieldset> 
      <legend>Fields</legend> 
      <p> 
       Username : <%= Html.TextBox("Username") %> 
      </p> 
      <p> 
       Forename : <%= Html.TextBox("Forename") %> 
       <%= Html.ValidationMessage("Forename", "*") %> 
      </p> 
      <p> 
       Surname : <%= Html.TextBox("Surname","") %> 
       <%= Html.ValidationMessage("Surname", "*") %> 
      </p> 
      <p> 
       <input type="submit" value="Create" /> 
      </p> 
     </fieldset> 

    <% } %> 

    <div> 
     <%=Html.ActionLink("Back to List", "Index") %> 
    </div> 

</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server"> 
    <title><%= ViewData["ProjectTitle"] %> - Create User</title> 
</asp:Content> 

ich diesen post-Methode in meinem Controller dann haben die eine Fehlermeldung angezeigt, wenn der Name Feld leer soll, ich weiß, es gibt keine andere Logik ist in dieser Funktion im nur versuchen, Bekomme meinen Kopf rund um die Validierung.

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(FormCollection formValues) 
    { 
     if (formValues["Surname"] == string.Empty) 
      ViewData.ModelState.AddModelError("Surname", "No way"); 
     return View("Create"); 
    } 

Wenn ich dies ausführen und klicken Sie auf einen Benutzer speichern die Methode Create läuft gut und fügt den Fehler, aber dann die Anwendung umfällt, hightlights es die Zeile in der Ansicht, die den Namen Textbox erstellt und sagt: „Nicht auf eine Instanz des Objekts gesetzt ". Es läuft gut, wenn ich etwas in die Textbox des Nachnamens lege und der Fehler nicht hinzugefügt wird.

Ich denke, ich vermisse etwas wirklich einfaches, aber kann was erarbeiten.

Irgendwelche Ideen?

Dank

Gavin

+0

Wo die Meldung „nicht auf eine Instanz des Objekts festgelegt“ wird gesetzt wird? –

+0

es passiert auf dieser Linie Nachname: <% = Html.TextBox ("Nachname", "")%> – Gavin

+0

Hmm, ich denke, es ist wegen des zweiten Arguments. Es sucht nach einem "" (leeren) Schlüssel in ViewData und es wirft Objektreferenz. –

Antwort

0

Ich glaube, ich eine Lösung, die die setModelValue Linie unter meiner Methode oberhalb der Linie Hinzufügen gefunden zu haben, der Fehler macht Sätze Arbeit.

  ModelState.SetModelValue("Username", new ValueProviderResult(ValueProvider["Username"].AttemptedValue, formValues["Username"], System.Globalization.CultureInfo.CurrentCulture)); 
      ModelState.AddModelError("Username", "Invalid Username"); 

Wenn jemand könnte erklären, warum das funktioniert, das wäre toll, wenn nicht ich diese Antwort tommorow akzeptieren werde. Ich würde es lieber nicht für immer machen müssen, wenn ich nicht wirklich muss.

1

Haben Sie versucht, das zweite Argument auf TextBox zu entfernen? Es wird nach dem leeren Schlüssel in ViewData suchen.

die Linie unterhalb

Surname : <%= Html.TextBox("Surname","") %> 

Bedürfnisse sein, wie

Surname : <%= Html.TextBox("Surname") %> 
+0

Ja, es muss <% = Html.TextBox ("Nachname") sein%> – RichardOD

+0

So hatte ich es zuerst, ich änderte es, als ich zuerst den Fehler bekam, um zu sehen, ob das das beheben würde, aber es machte keinen Unterschied – Gavin

+0

hmm. interessant. es muss in diesem Fall eine Objektreferenz geben. aber könnten Sie versuchen, die Validierungskontrolle für das Vornamenfeld zu ändern. Entfernen Sie den Nachnamen und versuchen Sie es für den Vornamen? Tritt der gleiche Fall auf? –

-1

Sie sollten für Null oder leer in Ihrer if-Anweisung testen,

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Create(string Username, string Surname, string Forename) 
{ 
    if (String.IsNullOrEmpty(Surname)) 
    { 
    ModelState.AddModelError("Surname", "No way"); 
    } 

    return View(); 
}