2012-07-06 33 views
0


我在我的網站的部分來看,很多網頁之間共享,搜索功能,包括:從日期

迄今爲止
文件類型
文件名
MVC3搜索用戶控件

現在,問題是,在一些頁面我不希望包含文件類型,在其他頁面我不希望(從0到)日期標準被包括在內

我該怎麼辦?我應該爲每個功能創建一個局部視圖嗎?或從內部顯示/隱藏標準?

_Filters.cshtml

@model Entities.FilterOperations 
<table width="85%" border="0" align="center" cellpadding="0" cellspacing="1"> 
    <tr> 
     <td class="formtit"> 
      Start Date 
     </td> 
    </tr> 
    <tr> 
     <td>@Html.TextBoxFor(m => m.StartDate, new { @class = "date" }) 
     </td> 
    </tr> 
    <tr> 
     <td class="formtit"> 
      End Date 
     </td> 
    </tr> 
    <tr> 
     <td>@Html.TextBoxFor(m => m.EndDate, new { @class = "date" }) 
     </td> 
    </tr> 
    <tr> 
     <td class="formtit"> 
      File Type 
     </td> 
    </tr> 
    <tr> 
     <td>@Html.TextBoxFor(m => m.FileType) 
     </td> 
    </tr> 
    <tr> 
     <td class="formtit"> 
      File Name 
     </td> 
    </tr> 
    <tr> 
     <td>@Html.TextBoxFor(m => m.FileName) 
     </td> 
    </tr> <tr> 
     <td align="right"> 
      <input type="submit" value="Search" /> 
     </td> 
    </tr> 
</table> 

回答

0

只需添加一些屬性到您的FilterOperations像模式:

public bool RenderFileType {get; private set;} 
public bool RenderDateTo {get; private set;} 

有了一個新的構造函數:

public FilterOperations(bool renderFileType = true, bool renderDateTo = true) { 
    RenderFileType = renderFileType; 
    RenderDateTo = renderDateTo; 
} 

現在你可以在你的部分設置的條件,像這樣:

@if(Model.RenderFileType) { 
<tr> 
    <td>@Html.TextBoxFor(m => m.FileType) 
    </td> 
</tr> 
} 

然後在你的視圖中調用你的部分像這樣:

@Html.Partial("_Filters.cshtml", new FilterOperations(renderDateTo: false)) 
+0

我不認爲這是最好的變種。在MVC模式模型中是一個數據。無需將業務數據與此類屬性混合進行展示。 Viewdata和Viewbag是爲這種情況創建的。 – sleepwalker 2012-07-07 07:11:00

+0

它不是數據嗎?它只是一個像IsActive或CanEdit的屬性。如果你真的想單獨考慮你的問題,試試這樣的事情吧http://kazimanzurrashid.com/posts/asp-dot-net-mvc-viewmodel-usage-and-pick-your-best-pattern – Paul 2012-07-07 19:52:47

+0

實體是用於商業邏輯的並存儲數據,DTO的用於傳輸原始數據,ViewModels是幫助渲染視圖和命令是從視圖接收數據。以上是一個ViewModel。 – Paul 2012-07-07 21:31:17

0

沒有意義的創造幾乎相等的諧音。使用Viewbag。

@if(ViewBag.ShowSomething ?? true) 
{ 
    //enter code here 
}