2012-03-07 63 views
2

我要開發一個搜索頁面,我將有多個字段來自differenet模型(實體)。此外,我在同一屏幕上有多個DropDownList,其值將從查找表填充。MVC3搜索屏幕與多個模型和查找表

我想知道(在這種情況下)什麼是最好的方法。我應該創建ViewModel並將該模型傳遞給我的視圖嗎?或者我需要不同的方法?

但我不知道我應該如何處理我的下拉字段,這是從查找表填充。

此外,在提交頁面時,我應該如何在下一個搜索詳細信息屏幕中獲取這些值以獲取db中的所有記錄?

我使用MVC3與EF 4.2

回答

1

擁有一個具有必要屬性(您的搜索條件)的ViewModel是最好的選擇。 當您爲搜索執行HttpGet操作時,會從查找表中加載所有數據並加載到屬性(例如:States等..)。

public ActionResult Search() 
    { 
    SearchViewModel objVM=new SearchViewModel(); 
    objVM.States=MyService.GetStates(); 
    objVM.Type=MyService.GetUserTypes();  
    return objVM.  
    } 

    [HttpPost] 
    public ActionResult Search(SearchViewModel objVM) 
    { 
     if(ModelState.IsValid) 
     { 
     //Go for the search and return results 

     } 
     return View(objVm); 
    } 
+0

所以我會創建一個只有必要的搜索屬性的viewmodel。這意味着我不需要在我的viewmodel中引用我的整個模型屬性。 – 2012-03-07 22:54:41

+0

還有一件事,在搜索結果時,我需要先用外部數據庫搜索一些關鍵字段,如果找到,那麼它會用當前數據庫搜索整個字段。我的問題是我已經有一個查詢可用於搜索條件,我可以在我的EF上使用該查詢嗎?你有任何樣品或鏈接來實現這一點。 – 2012-03-07 23:06:53

+0

@PrasantaBiswal:可以在搜索表單中使用任何字段作爲屬性。 – Shyju 2012-03-07 23:44:47

1

當然,最好的辦法肯定是使用視圖模型。像這樣的東西就夠了:

public class Model1 
{ 
    public string Prop1 { get; set; } 
} 

public class Model2 
{ 
    public string Prop2 { get; set; } 
} 

public class ViewModel1 
{ 
    public Model1 Model1 { get; set; } 
    public Model2 Model2 { get; set; } 
    public SelectList DropDownItems { get; set; } 
} 

你會與將這個視圖模型傳遞給視圖在控制器的操作方法SelectListItem對象的量填充SelectList