Я работаю над веб-проектом, где я сначала получаю данные из базы данных и привязываюсь к элементу управления Html. Если есть ошибка проверки, я отправлю тот же вид назад для рендеринга с отображаемыми ошибками проверки. Когда страница появляется, появляется исключение. Я прошел через код и обнаружил, что модель передана, будет нулевой сбор. В основном любое свойство, не привязанное к текстовому полю, было изменено на null. Мне сказали не использовать сеанс или viewdata для хранения временного хранилища. Так я называю метод SaveViewState где сохранить все значение свойства свойства ViewModel к статической переменной, как такasp.net mvc Реализация ViewState
private static MyViewModel _viewModel;
private MyViewModel SaveViewModel(MyViewModel viewModel)
{
if (_viewModel == null)
{
_viewModel = new MyViewModel();
}
if (!string.IsNullOrEmpty(viewModel.MyName))
_viewModel.MyName= viewModel.MyName;
if (!string.IsNullOrEmpty(viewModel.Number))
_viewModel.Number= viewModel.Number;
if (!string.IsNullOrEmpty(viewModel.Address))
_viewModel.Address= viewModel.Address;
if (!string.IsNullOrEmpty(viewModel.State))
_viewModel.State= viewModel.State;
}
Это работает, но я думаю, что это очень неэффективно и должно быть лучше реализовать ViewState в MVC с Session или ViewData или HiddenFields? Кстати, мне сказали не использовать этих троих.
Любая помощь приветствуется. Благодарю.
Покажите, как вы используете коллекцию. Если вы публикуете действие, которое имеет модель в качестве параметра, оно должно быть заполнено. –
Одна из многих причин, по которым была разработана MVC, заключалась в том, чтобы избавиться от 'ViewState'. Ваша реализация не будет работать, потому что она не является потокобезопасной (и все это не удастся, если более 1 пользователь редактирует экземпляр «MyViewModel»). Если вы не создаете элементы управления для отправки всех данных и должны вернуть представление, затем снова вызовите репозиторий, чтобы получить исходный объект и снова заполнить модель представления отсутствующими значениями. –