我有一個簡單的表格和高級搜索表單。我通過List<Customers>
到模型:使用ASP.NET MVC將數據傳遞給一個簡單的網格表單
View(List<Customers>);
那麼什麼是傳遞和返回數據的搜索表單最好的方法?我想使用驗證或某事,但我認爲通過ViewData
傳遞數據不是個好主意。有什麼建議麼?
我有一個簡單的表格和高級搜索表單。我通過List<Customers>
到模型:使用ASP.NET MVC將數據傳遞給一個簡單的網格表單
View(List<Customers>);
那麼什麼是傳遞和返回數據的搜索表單最好的方法?我想使用驗證或某事,但我認爲通過ViewData
傳遞數據不是個好主意。有什麼建議麼?
您應該將您所需的所有數據包含在特定於該視圖的模型中。這樣做的好處是,您還可以在模型中包含您的搜索條件,一開始這些條件將爲空,但是當您發佈搜索時,模型會自動包含您的搜索條件,以便在傳回結果時可以重新加載它。這將有助於保持你的狀態在帖子之間。
這也允許您的所有視圖的數據類型安全,其中ViewData
不會。
如:
public class CustomerSearchViewModel
{
public List<Customer> Customers { get; set; }
// your search criteria if you want to include it
public string SearchFirstName { get; set; }
public string SearchLastName { get; set; }
public int SearchCustomerID { get; set; }
// etc...
}
當您返回回List<Customer>
搜索條件應該已經在你的模型從後填充讓你的視圖可以默認搜索條件回相應的對照組(假設你的搜索結果和搜索輸入控件在同一視圖中)。
例如,在您的文章中,您將接受CustomerSearchViewModel
。然後,您需要做的就是獲取您的客戶列表,並將其添加回模型並返回相同的模型。
// assuming you have accepted a CustomerSearchViewModel named model
model.Customers = GetCustomersForSearchCriteria(model.SearchFirstName,
model.SearchLastName, model.SearchCustomerID);
return View(model);
您還可以將驗證屬性添加到您的模型屬性,以利用MVC中的內置驗證。如果您使用ViewData
來傳遞這些數據,這是不可能的。
你還必須考慮'下一個人'。當視圖需要的所有數據位於同一個類中時,它會更乾淨。通過這種方式,他們不必通過代碼來查找是否正在使用ViewData
以及實際上正在傳遞哪些數據。
ViewData
仍然是傳遞數據的一個選項,但我儘量儘量減少它的使用。
不是隻傳遞一個項目列表到您的視圖,而是創建一個包含項目列表和任何其他可能需要的數據的類,即ViewModel。
public class CustomerSearchViewModel {
public IEnumerable<Customer> Customers { get; set; }
public string SearchTerm { get; set; }
}
.....
var viewModel = new CustomerSearchViewModel {
Customers = customerList,
SearchTerm = searchTerm
};
return View(viewModel);