我在一個Web項目中工作,首先從數據庫獲取數據並綁定到Html控件。如果出現驗證錯誤,我將發送相同的視圖以顯示驗證錯誤。當頁面出現時,有一個例外。我瀏覽了代碼,發現模型已通過將收集空值。基本上任何不綁定到文本框的屬性都被更改爲null。我被告知不要使用session或viewdata來保存臨時存儲。因此,我調用一個方法SaveViewState它的視圖模型屬性的所有屬性值保存到一個靜態變量,像這樣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與會議或ViewData或HiddenFields?順便說一下,我被告知不要使用這三個。
任何幫助表示讚賞。謝謝。
顯示您如何使用集合。如果您發佈以模型作爲參數的操作,它應該被填充。 –
爲什麼MVC開發的原因之一是擺脫'ViewState'。你的實現不會工作,因爲它不是線程安全的(如果多於一個用戶正在編輯'MyViewModel'的實例,它將全部失敗)。如果您不創建控件來回發所有數據並需要返回視圖,請再次調用存儲庫以獲取原始對象,並使用缺少的值再次填充視圖模型。 –