2009-06-10 65 views
0

我有我的MVC局部視圖一個foreach基於表:C#MVC:ModelBinder的案例,還是不是?尋找「最乾淨」解決方案

<% foreach (var item in Model) { %>  
    <tr> 
     <td><%= Html.Encode(item.FirstName) %></td> 
     <td><%= Html.Encode(item.LastName) %></td> 
     <td><%= Html.Encode(item.LastVisit) %></td> 
    </tr>  
<% } %> 

它的旁邊我有一個不同的控制與一羣領域是允許在許多不同的方式檢索,包括選項下拉菜單(搜索基於特定標識等):

<select> 
    <option value="1">Local</option> 
    <option value="2">Public</option> 
    <option value="3">Special</option> 
</select> 
<input type="text" name="freeTextSearch" /> 
<input type="text" name="floorNumber" /> 

我會在這裏使用一個自定義的模型綁定器,或簡稱爲「ContactFilter」對象是這樣的:

public class ContactFilter 
{  
    public Int32 ContactSourceId; 
    public String FreeTextSearch; 
    public Int32 FloorNumber; 
} 

,然後訪問這樣說:

public ActionResult Filter(ContactFilter filter) 
{ 
    // do filtering, return view 
} 

還是有這樣做的更好的辦法?我遇到的另一個問題是,我需要在過濾器中包含排序和分頁參數(當前頁面,排序字段,方向)。排序方向需要從字符串轉換爲SortDirection枚舉實例。所以我想我不能再使用默認的模型綁定器了,或者我可以嗎?

回答

0

您是在顯示/隱藏基於下拉列表中選定項目的搜索字段嗎? (本地/公共/特殊)?

如果是這樣,您可能需要在下拉更改時使用javascript更改表單的操作,併爲可以一次使用的每組搜索字段創建控制器操作。

然後,您的控制器上的每個動作只能取其所需的參數。似乎可能會使測試更容易。

如果用戶可以一次搜索所有字段,我認爲您提出的方法很好。