2012-03-10 3 views
28

У меня есть метод контроллера CreateOrUpdate, этот способ должен сохранить автомобиль в базе данных, а затем вернуться как обычно.Просмотр не обновляется после сообщения

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

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

В методе theCar.Save(), я установить идентификатор для автомобиля, с тем, что идентификатор будет в базе данных после того, как автомобиль сохраняется (При выполнении вставки я использую SCOPE_IDENTITY(), то save метод работает хорошо, и если я отлаживаю и просматриваю значения для машины после вызова Save(), то идентификатор верен. Но когда визуализируется представление, в представлении ID равен 0.

Может ли кто-нибудь помочь я, и скажите мне, почему это произойдет.Я не думаю, чтобы изменить модель для представления в методе HTTP POST? Должен ли я перенаправить на исходный метод CreateOrUpdate(), если сохранение было успешным.

+0

Ьги без 'theCar.Save();' линии , –

+0

theCar.Save() только сохраняет модель. Это не проблема. Даже если я задал свойство класса в методе HttpPost без метода theCar.Save(). Свойство не отражено в представлении – Captain0

+0

FYI: Если вы успешно сохранили данные и хотите повторно отобразить страницу, возможно, захотите следовать шаблону Post/Redirect/Get. https://en.wikipedia.org/wiki/Post/Redirect/Get –

ответ

55

Это должна быть проблема ModelState. , если вы используете Htmlhelper для отображения значения id. По умолчанию HtmlHelper display ModelState value not Model. Попробуйте значение модели дисплея ввиду

<td> 
    @Model.id 
</td> 

или чистого ModelState Значение в контроллере

ModelState.Clear(); 

или сбросить значение после того, как идентификатор SaveChange.

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

Reset the value of textarea after form submission

+0

'ModelState [" MyModelProperty "]. Value = null;' в сочетании с 'model.MyModelProperty = null;' (для государственного обслуживания) сделал трюк для мой вопрос. Спасибо тебе за это! – Alexandru

+0

Это мучило меня в течение самого долгого времени, 'ModelState.Clear()' сделал это для меня, спасибо! – Novastorm

+1

Ужасная ошибка в mvc по моему скромному мнению – toddmo

1

Я не хочу, чтобы очистить ModelState, потому что мне нужно, чтобы показать ошибки, поэтому я пошел с

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

ModelState["id"].Value = vpr; 
Смежные вопросы