2013-05-20 3 views
5

Ich habe derzeit eine Ansicht, die zwei Textfelder enthält, in die Benutzer einige Daten eingeben können. Ein Textfeld erlaubt nur Werte von 1-10, der andere eine Zeichenfolge. Ich bin mir nicht sicher, welche Codeänderung ich gemacht habe, aber das zweite Textfeld, das einen String akzeptiert, funktioniert nicht mehr. Wenn ich beispielsweise eine Zeichenfolge eintrage und versuche, das Formular zu senden, erhalte ich eine Validierungsnachricht mit der Meldung "Der Wert" (Zeichenfolge) "ist ungültig. Im Folgenden finden Sie einige Codeschnipsel in meiner Lösung.Der Wert "(String)" ist ungültig

Entität:

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

    [Range(1, 10)] 
    [Required] 
    public int Rating { get; set; } 
    public string Review { get; set; } 
    public int MovieId { get; set; } 
} 

Controller:

public class ReviewsController : Controller 
{ 
    private MovieLoversDb _db = new MovieLoversDb(); 

    public ActionResult Index([Bind(Prefix = "id")]int movieId) 
    { 
     var movie = _db.Movies.Find(movieId); 
     if (movie != null) 
     { 
      return View(movie); 
     } 
     return HttpNotFound(); 
    } 

    [HttpGet] 
    public ActionResult Create(int movieId) 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Create(MovieReview review) 
    { 
     if (ModelState.IsValid) 
     { 
      _db.MovieReviews.Add(review); 
      _db.SaveChanges(); 
      return RedirectToAction("Index", new { id = review.MovieId }); 
     } 
     return View(review); 
    } 

Teilansicht:

@model MovieLovers.Models.MovieReview 

@{ 
    ViewBag.Title = "Review a Movie"; 
} 

<h2>Review a Movie</h2> 

@using (Html.BeginForm()) { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

<fieldset> 
    <legend>New Review</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Rating) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Rating) 
     @Html.ValidationMessageFor(model => model.Rating) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Review) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Review) 
     @Html.ValidationMessageFor(model => model.Review) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.ReviewerName) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.ReviewerName) 
     @Html.ValidationMessageFor(model => model.ReviewerName) 
    </div> 
    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 
} 

Die Frage n Was ist, was mache ich falsch? Warum wird dieser Validierungsfehler generiert?

+0

Ich glaube, Sie haben eine andere Ansicht gepostet. Ihre veröffentlichte Ansicht zeigt nur die Liste an. Hab ich recht? –

+0

Ja, ich entschuldige mich. Jetzt aktualisieren –

+0

Haben Sie ein anderes Feld auf der gerenderten Seite namens 'Review'? – Jasen

Antwort

5

ich es dachte, in den Kommentaren unter dem Original-Beitrag einen Vorschlag von Jasen Verwendung aus. Es scheint, als ob "Review" zweimal verwendet wurde, obwohl ich nicht finden konnte, wo. Ich habe den Namen der Eigenschaft in "body" geändert und jetzt funktioniert es.

Vielen Dank für Ihre Hilfe!

+2

Die beiden Zeiten sind die Eigenschaft "MovieReview.Review" und der Aktionsparameter "(MovieReview Review)". – Foole

0

Ich denke, in unter model.Review und Model.Rating kann nicht als Modus direkt zugänglich sein ist IEnumerable

 <th> 
     @Html.DisplayNameFor(model => model.Rating) 
    </th> 
    <th> 
     @Html.DisplayNameFor(model => model.Review) 
    </th> 
+0

Ich habe das "IEnumerable" entfernt und es wird weiterhin die Validierungsnachricht angezeigt. Dasselbe gilt für die Aktion "Aktion bearbeiten", die ich kürzlich für diese Aktion erstellt habe. –

-1

Entfernen Sie die @Html.ValidationSummary(true)

oder

entfernen alle ValidationMessageFor und ändern für (entfernen wahr) @Html.ValidationSummary()

Bearbeiten:

mit

Sie wollen alle ValidationMessageFor sein entfernen und die ValidationSummary(true)-ValidationSummary()

+0

Wird dies jedoch die Validierung auf diesen Formularen entfernen? –

+0

Sie möchten alle ValidationMessageFor entfernen und die ValidationSummary (true) in ValidationSummary() ändern –

1

Bitte versuchen Sie ändern

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

    [Range(1, 10)] 
    [Required] 
    public int Rating { get; set; } 
    public string? Review { get; set; } 
    public int MovieId { get; set; } 
} 
+0

kann ich nicht. Ich verwende MovieReview in einem generischen Typ für eine andere Entität. Ich erhalte eine Fehlermeldung, dass dieses Feld nicht null sein kann. –

+0

Strings sind bereits nullbar – Jasen

+0

Sie verwendeten EF. Recht? Und das Nähern ist das erste Modell? – thangchung

1

Es funktioniert nicht, da Ihre Domain-Klasse die Eigenschaft Review (public string Review { get; set; }) hat und die Methode, die aktualisierte Domain-Klasse empfängt, auch den Parameter benannte Review hat (public ActionResult Create(MovieReview review)).

Ändern public ActionResult Create(MovieReview review) zu public ActionResult Create(MovieReview movieReview).

2

das Problem ist der Name des Feldes Bewertung:

@ Html.EditorFor (Modell => Modell.Bewertung)

als Name des Parameters in der Steuerung:

public Action erstellen (MovieReview Bewertung)

den Namen des Parameters ändern sollte funktioniert auch

0

Ihr Var-Name sollte nicht dasselbe wie ein Klassenname sein versuchen Sie dies:

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

    [Range(1, 10)] 
    [Required] 
    public int ratingId { get; set; } 
    public string reviewText { get; set; } 
    public int movieId1 { get; set; } 
}