我是一個很長時間的WebForms開發人員,但終於通過將需要更新的WebForms網站之一轉換爲MVC3來學習MVC。新手MVC常見的隱藏和顯示內容的做法
我從閱讀中瞭解MVC的基礎知識,但在第一天就在現實世界中苦苦掙扎,可能很簡單,我也想知道如何做到這一點,以及最佳做法。
對於這個問題,我不是在尋找代碼(儘管可能有點幫助),只是足夠的信息讓我走上正確的道路。我已經看過不少例子和教程,但似乎沒有顯示出與我的情況相關的東西,所以我在這裏問。
因此,我正在處理的第一頁是搜索結果頁面。這比簡單的搜索頁面更復雜一點。如果它發現拼寫錯誤的單詞,沒有找到結果的區域,以及搜索結果本身的區域(如果有),它都有一個建議區域。
因爲它搜索兩個數據庫表(實際上是視圖)我有一個模型,它包含表模型和一個優先級字段,我用它來排序最相關的結果。該模型是這樣的:
public class SearchResult
{
public Table1 { get; set; }
public Table2 { get; set; }
public int Priority { get; set; }
}
在我使用的面板包含每個區域的,所以我可以打開和關閉他們,像這樣的WebForms:背後
<asp:Panel ID=」panSuggest」 runast=」server」 Visible=」false」>
…
</asp:Panel>
<asp:Panel ID=」panNoResults」 runat=」server」 Visible=」false」>
…
</asp:Panel>
<asp:Panel ID=」panResults」 runat=」server」>
<asp:Repeater ID=」repResults」 runat=」server」>
…
</asp:Repeater>
</asp:Panel>
在我目前的WebForms代碼邏輯我看看是否有任何拼寫錯誤的作品,如果是這樣,顯示panSuggest和隱藏所有其他面板。如果沒有錯誤,則根據需要隱藏show panResults/panNoResults。
那麼這種事情通常是在MVC中完成的?我是否在我的控制器中設置了一個ViewBag項目,以確定是否應在我的視圖中顯示PanSuggest,然後選擇隱藏/顯示,並檢查我的模型是否有任何項目以確定是否應顯示panResults/panNoResults 。像我的代碼在下面,或者這不是正確的方法嗎?
@{ if (ViewBag.Suggest == true) {
<div>
Suggest
</div>
} else {
@{ if (Model.Count == 0) {
<div>
No Results
</div>
} else {
<div>
@foreach (var result in Model) {
@result.Table1.Whatever etc etc
}
</div>
}
}
更新。
我一直在閱讀更多,並有很多建議,以避免ViewBag。
那麼相反,我應該改變我的模型,包括我需要的額外數據?這樣
Public class ViewModel
{
public string Suggest { get; set; }
public List<SearchResult> Result { get; set; }
}
public class SearchResult
{
public Table1 { get; set; }
public Table2 { get; set; }
public int Priority { get; set; }
}
東西然後在我看來,我可以檢查是否ViewModel.Suggest不爲空,檢查ViewModel.Result,看看是否有物品(搜索結果)的存在。
這是一個更好的解決方案嗎?
用另一種可能的方法更新了問題。 – johna
視圖模型方法是一個很好的方法。您的視圖模型可以提供所需的所有信息。它可能是可重用的,可能只是針對這一個觀點。這與Web Forms相比有很大的不同,它通常與域模型/數據緊密耦合。 –