В моем приложении ASP.NET MVC 3 у меня есть страница, где после отправки формы мне нужно изменить значение из формы. Если я делаю это в ViewModel, это не имеет никакого эффекта, я должен сделать это, используя ModelState["Field"].Value
.
Дело в том, что на самом деле у меня много работы, которую я должен выполнить в ViewModel, когда страницы загружаются И после POST. Итак, у меня есть метод, который получает ViewModel и выполняет всю эту работу. Но, как я уже сказал, после POST изменение объекта ViewModel бесполезно. Это почему? Метод на контроллере возвращает View(viewModel);
. Разве представление не должно использовать значения ViewModel?
Я хотел бы понять, почему бесполезно изменять ViewModel, а также знать, есть ли какой-либо метод в ModelState, который «обновляет» значения полей, выбрасывает объект ViewModel.
Вот мой код контроллера:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(MyViewModel viewModel)
{
try
{
if (ModelState.IsValid)
//Do stuff and redirect
}
catch(Exception ex)
{
//Log and add error to the ModelState
}
someMethodWhichDoesALotOfThingsInTheViewModel(viewModel);
return View(viewModel);
}
Я думаю, что остальная часть кода не нужна, если кто-то думает, что это поможет, дайте мне знать!
Обновление
Я не хочу терять какие-либо ошибки, даже те, которые были изменены в ViewModel. Хорошим примером может быть капча, если пользователь делает какую-либо ошибку в форме (только с полем капчи или только с любыми другими полями, а не с капчей). Я хочу показать ему все его ошибки, а также обновить капчу. Нет смысла визуализировать форму со вставленным старым значением капчи, поэтому я хочу очистить это поле.
Обновление 2
Я решил добавить @Value = Model.PropertyInViewModel
в атрибуты HTML каждого Html.TextBoxFor
. Но я бы предпочел избегать этой неприятной работы, поэтому, если кто-то найдет какое-нибудь лучшее решение, пожалуйста, дайте мне знать.