2011-06-02 4 views
11

tengo una forma MVC para la adición de una entidad simple. Estoy usando TextBoxFor (model => model.FieldName) para crear los campos de entrada. Tengo un botón Guardar y un botón Guardar y Nuevo. Se supone que los botones Guardar y Nuevo se vuelven a publicar en la acción Guardar y luego devuelven la Vista actual con un modelo vacío para permitir al usuario agregar otra entidad. Sin embargo, lo que sucede es que, aunque el modelo está vacío, los campos de entrada se generan con los valores ingresados ​​para la entidad anterior. Espero que esto tenga sentido.TextBoxFor ayudante conserva valor anterior incluso cuando el valor se encuentra vacío

Sé que podría hacer una redirección, pero que parece como una solución feo, así que si alguien se ha topado con esto antes, yo lo agradecería alguna entrada.

Gracias.

+0

¿Puedes publicar algo de tu código? Idealmente desde la acción. – ataddeini

+0

No estoy seguro de que deba realizar una POSTING para la acción del botón Nuevo. Esa acción debería ser una solicitud GET. – Paul

Respuesta

13

El problema aquí es que su ViewData.ModelState todavía está lleno con los valores de la publicación original, incluso si el Model es nulo y no transfiere explícitamente ningún valor a su vista.

En realidad no pienso volver a dirigir a la acción original es que fea de una solución, pero si usted no quiere hacer eso, entonces la limpieza de la ViewData debe trabajar para usted:

[HttpPost] 
public ActionResult Save(TestModel model) 
{    
    ViewData = null; 
    return View(); 
} 
+0

¡Gracias! Tiene sentido. – sydneyos

1

I tenían el mismo problema ver aquí:

Updating value provider prior to TryUpdateModel

Sin embargo - después de un post - si tiene éxito, se debe por diseño puede redirigir a una acción de conseguir para su próxima dat a. Esto es parte del patrón PRG (post-redirect-get) que debe ser usado por mvc. Los ayudantes asumen que está utilizando este patrón y, si está mostrando información después de una publicación, debe haber habido un error, por lo que vuelven a mostrar los valores publicados para "corregir". Intente no solucionar esto, pero refactorice su código para que funcione correctamente con PRG.

+0

¿No es esto ineficiente? ¿Un redireccionamiento no causa un viaje de ida y vuelta adicional del cliente al servidor y viceversa? ¿O no es ese el caso con RedirectToAction? – sydneyos

+0

¿Definir 'ineficaz'? Es la forma en que fue diseñado para funcionar y es mucho más limpio. Muchas aplicaciones de formularios web adolecen de mostrar datos en la devolución de datos que no reflejan de forma adecuada cómo se ve si carga los datos nuevamente. MVC resuelve esto redireccionando a tu get. Es mucho más limpio, y el cliente también puede presionar f5 sin el temido mensaje de advertencia del navegador del que los clientes no tienen ni idea. –

5

se recomienda usar

ModelState.Clear(); 

en lugar de

ViewData = null; 

ya que me parece que mucho más clara de lo que está tratando de hacer. Aunque ambos lograrán lo que estás tratando de hacer.

Cuestiones relacionadas