validate validar net mvc isvalid formulario for errors dataannotations custom asp asp.net-mvc-2 binding

asp.net-mvc-2 - isvalid - validar formulario asp.net mvc



Textbox vuelve al valor anterior mientras que Modelstate es válido en devolución de datos (2)

Tal vez me falta algo, pero cuando tengo un formulario que se vuelve a publicar en la misma acción, el valor del cuadro de texto vuelve al valor anterior. El siguiente ejemplo debe incrementar el valor en el cuadro de texto en cada POST. Esto no sucede, el valor en el modelo se incrementa y el modelo es válido.

Sin embargo, si borro el estado del modelo en HttpPost Action (el comentario en el código), todo funciona como se esperaba.

¿Me estoy perdiendo de algo?

Aquí está el código:

Modelo:

public class MyModel { public int MyData { get; set; } }

Ver:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.MyModel>" %> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <% using (Html.BeginForm()) {%> <%: Html.TextBoxFor(m => m.MyData)%> (<%: Model.MyData%>) <%: Html.ValidationMessageFor(m => m.MyData) %> <br /> State :<%: ViewData["State"] %> <br /> <input type="submit" /> <% } %> </asp:Content>

Controlador:

public class HomeController : Controller { [HttpGet] public ActionResult Index() { return View(new MyModel { MyData = 0 }); } [HttpPost] public ActionResult Index(MyModel myModel) { // ModelState.Clear(); ViewData["State"] = "invalid"; if (ModelState.IsValid) ViewData["State"] = "Valid"; var model = new MyModel { MyData = myModel.MyData + 1 }; return View(model); } }



Acabo de encontrar una respuesta a esto en línea.

El truco es borrar el modelo de estado antes de devolver el modelo

[HttpPost] public ActionResult Index(MyModel myModel) { // ModelState.Clear(); ViewData["State"] = "invalid"; if (ModelState.IsValid) ViewData["State"] = "Valid"; var model = new MyModel { MyData = myModel.MyData + 1 }; ModelState.Clear(); return View(model); }

Para más detalles, lee estos 2 artículos

http://forums.asp.net/p/1527149/3687407.aspx

Asp.net MVC ModelState.Clear