2012-03-10 14 views
28

Tengo un método de controlador CreateOrUpdate; se supone que este método guarda el automóvil en la base de datos y luego lo devuelve de manera normal.Ver no actualizar después de la publicación

public ActionResult CreateOrUpdate(int ID = 0) 
{ 
    Car car = new Car(ID); 
} 

[HttpPost] 
public ActionResult CreateOrUpdate(Car car) 
{ 
     car.Save(); 
     return View(car); 
} 

En el método theCar.Save(), i establecer el ID para el coche, con lo que el id estará en la base de datos después de que el coche se guarda (Cuando se realiza una inserción utilizo SCOPE_IDENTITY(), el El método save funciona bien, y si depuro y miro los valores para el auto después de que se llama a Save(), la identificación es correcta. Pero cuando se representa View, el ID es 0 en la vista.

¿Alguien podría ayudarme? yo, y dime por qué sucedería esto. ¿No se supone que debo cambiar el modelo de la vista en el método HTTP POST? ¿Debería redirigir al método original CreateOrUpdate() si el guardado fue exitoso?

+0

intento sin tener 'theCar.Save();' línea . –

+0

theCar.Save() solo guarda el modelo. Este no es el problema. Incluso si establezco una propiedad de la clase en el método HttpPost, sin el método theCar.Save(). La propiedad no se refleja en la vista – Captain0

+0

FYI: en el caso de que haya guardado los datos correctamente y desee volver a mostrar la página, es posible que desee seguir el patrón Publicar/Redirigir/Obtener. https://en.wikipedia.org/wiki/Post/Redirect/Get –

Respuesta

55

debería ser el problema de ModelState. si usa Htmlhelper para mostrar el valor de id. Valor predeterminado HtmlHelper display Modelo Valor de estado no Modelo. Trate valor de modelo de pantalla en vista

<td> 
    @Model.id 
</td> 

o Limpiar ModelState Valor en el controlador

ModelState.Clear(); 

o restablecer el valor id después SaveChange.

theCar.Save(); 
ModelState["id"].Value = theCar.id 
return View(theCar); 

Reset the value of textarea after form submission

+0

'ModelState [" MyModelProperty "]. Value = null;' combinado con 'model.MyModelProperty = null;' (para el mantenimiento del estado) hizo el truco para mi problema. ¡Gracias por esto! – Alexandru

+0

Esto me ha plagado por mucho tiempo, 'ModelState.Clear()' lo hizo por mí, ¡gracias! – Novastorm

+1

Horrible error en mvc en mi humilde opinión – toddmo

1

no quería despejar el ModelState porque necesitaba mostrar errores, así que fui con

ValueProviderResult vpr = new ValueProviderResult("", null, System.Globalization.CultureInfo.CurrentCulture); 

ModelState["id"].Value = vpr; 
Cuestiones relacionadas