MVC3 View doesn`t display empty form on validation passed

asp.net-mvc, asp.net-mvc-3, razor

Solution

Clear the modelstate:

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

All HTML helpers first look at the ModelState when rendering their values and only after that in the model.

Or even better and more properly use the Redirect-After-Post pattern (i.e. redirect after a successful POST):

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

Problem

Very simple situation, here is my model: ``` public class Comment { [Required] public string Name { get; set; } [Required] public string Text { get; set; } } ``` Here is my controller: ``` 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); } } } ``` And here is my standart genered strongly-typed View: ``` @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 is: when I enter valid data, `TryUpdateModel()` returns `true`, and ``` return View(new Comment()); ``` should display empty form, because new empty instance of Comment is passed, but it still displays form with values entered earlier. Please somebody tell me why. How to make it display empty form again?

Original source