2012-04-15 4 views
3

Sehr einfache Situation, hier ist mein Modell:MVC3 Ansicht doesn `t Anzeige leer Formular-Validierung bestanden

public class Comment 
{ 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public string Text { get; set; } 

} 

Hier mein Controller ist:

public class CommentController : Controller 
{ 
    // 
    // GET: /Comment/Create 

    public ActionResult Create() 
    { 
     return View(); 
    } 

    // 
    // POST: /Comment/Create 

    [HttpPost] 
    public ActionResult Create(FormCollection collection) 
    { 
     Comment new_comment = new Comment(); 

     if (TryUpdateModel(new_comment)) 
     { 
      return View(new Comment()); //problem is there 
     } 
     else 
     { 
      return View(new_comment); 
     } 

    } 



} 

Und hier ist mein standart genered strongly- typisierte Ansicht:

@model test.Models.Comment 

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 

<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> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Comment</legend> 

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

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

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

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

Problem ist: wenn ich eingeben va Deckel Daten, TryUpdateModel() kehren true und

return View(new Comment()); 

sollten leeres Formular angezeigt werden, weil neue, leere Instanz Kommentar übergeben wird, aber es zeigt immer noch Form mit Werten zuvor eingegeben.

Bitte jemand sagen mir warum. Wie wird es wieder leer angezeigt?

Antwort

4

Klar das Model:

if (TryUpdateModel(new_comment)) 
{ 
    ModelState.Clear(); 
    return View(new Comment()); //no more problem here 
} 

Alle HTML-Helfer an dem Model schauen zuerst, wenn ihre Werte zu machen und erst danach in dem Modell.


Oder noch besser und richtig verwenden, um die Redirect-After-Post Muster (das heißt nach einem erfolgreichen POST Redirect):

if (TryUpdateModel(new_comment)) 
{ 
    return RedirectToAction("Create"); 
} 
+0

wirklich weiß nicht über Model und ModelState.Clear(). Vielen Dank! – Roman