2012-06-01 8 views
9

Tengo una página con 2 la entrada type = text ..campos claro después de éxito

@model MVC3.ViewModel.TalkToUsVM 

@using (Html.BeginForm()) 
{ 
    <ul> 
     <li>@Html.TextBoxFor(m => m.TalkToUsRequest.Name)</li> 
     <li>@Html.TextBoxFor(m => m.TalkToUsRequest.Email)</li> 
    </ul> 

    <input type="submit" value="Save"/> 
} 

en mi controlador hago esto:

[HttpPost] 
public ActionResult Create(TalkToUsRequest talkToUsRequest) 
{ 
    var vm = new TalkToUsVM(); 

    if (TryValidateModel(talkToUsRequest)) 
    { 
     vm.Result = "Success"; 

     return View("Create",vm); 
    } 

    vm = new TalkToUsVM 
    { 
     Result = "Errrooooooor", 
     TalkToUsRequest = talkToUsRequest 
    }; 

    return View(vm); 
} 

por lo que el problema .. cuando mi modelo es válido , Configuré el resultado como "Correcto" y en este punto vm.TalkToUsRequest es nulo ... pero cuando se procesa la página, todos los campos tienen el mismo valor que cuando lo presenté ... incluso yo establezco vm.TalkToUsRequest = null !! ¿Cómo puedo borrar estos campos?

Respuesta

44

Por lo tanto, en este escenario debe borrar el estado de su modelo si vuelve a la misma vista. Trate siguiente:

ModelState.Clear(); 
    return View(vm); 
} 
+0

Agradable ... pero ¿por qué sucede si estoy estableciendo null en TalkToUsRequest? – MuriloKunze

+2

Ese es el comportamiento predeterminado. En su opinión, los controles auxiliares de MVC generan un nuevo valor si identifica que se modificó el estado de su modelo. Imagine un escenario donde haga clic en el botón enviar en un formulario. Que golpearía una acción en el controlador. Harás un poco de validación y si las cosas fallaron, volverás a la misma vista con algún error. En ese caso, debe mantener intactos los valores del modelo y mostrar algunos mensajes de error. Y si la validación pasa al controlador, entonces redirige a alguna otra página. – Lav

0

Su respuesta:

TryUpdateModel (aquí el nombre del modelo);

y se actualizará su estado de vista

y si también desea borrar toda Modelstate.error al mismo tiempo se puede también utilizar :

ModelState.Clear();

Cuestiones relacionadas