2008-11-11 51 views
3

我在抓住MVC框架背後的一些概念時遇到了一些麻煩。我正在做一個非常簡單的應用程序分類產品。ASP.Net MVC框架和數據綁定

創建屏幕將簡單地使用顯示類別列表,產品名稱和提交的下拉列表。

在一個普通的.Net應用程序中,我會綁定Page_Load中的服務器下拉列表,但在MVC應用程序中,從數據庫中檢索我的類別並將其添加到下拉列表中的最佳方法是什麼?

(對不起,我的問題是非常noobish但遺憾的是資源上做足MVC和例子經常被打破,由於早期變化)

回答

4

我不確定我是否完全掌握,但如果您的網頁顯示的是單一產品,且唯一的用戶輸入只是從下拉列表中選擇一個類別,我可以分類幫助(但我也是一個小菜鳥!)。

引用此頁面:

http://weblogs.asp.net/scottgu/archive/2008/05/27/asp-net-mvc-preview-3-release.aspx

你將要創建類別在控制器的SelectList(可能引用一個ID,和顯示名稱)。然後,您將此SelectList添加到您的ViewData。您也可以將其設置爲ViewData.Model的一部分,並從View中引用它。

在您的觀點中,您將HtmlHelper用於將SelectList作爲參數的DropDownList。

上面的鏈接應該表達得更好,這只是一個快速總結。該鏈接用於預覽3,但我認爲它應該仍然適用。

0

你的模型中檢索數據,您的演講爲視圖組織數據,視圖控制將您的模型綁定到UI元素。例如,這裏有一個LogEvent可以模型:

public class LogEvent{ 
    public string Title {get;set;} 
    public string Date {get;set;} 
    public string Message {get;set;} 

    // this is for example only; you would most likely bind directly against the host.GetAllLogs() result 
    public static IEnumerable<LogEvent> RetrieveAllLogs(ILogProvider host){ 
    return from x in host.GetAllLogs() select new LogEvent(x.LogTitle, x.Date, x.Message); 
    } 

下面是處理用戶請求查看所有日誌控制器:

[DependencyPropertyLolJk] 
protected ILogProvider MyLogProvider {get;set;} // set by DI 

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Logs() 
{ 
    return View("Logs", LogEvent.GetAllLogs(MyLogProvider).OrderByDescending(x => x.Date)); 
} 

這裏是視圖以及它是如何結合的模式:

<!-- header left out for brevity --> 
<table> 
    <thead> 
     <tr> 
      <th> 
       Date 
      </th> 
      <th> 
       Title 
      </th> 
      <th> 
       Message 
      </th> 
     </tr> 
    </thead> 
    <% foreach(var log in ViewData.Model) %> 
    <tr> 
<td><%= log.Date %></td> 
<td><%= log.Title %></td> 
<td><%= log.Message %></td> 
    </tr> 
    <% }; %> 
</table> 

<!-- ... --> 

所以你看,你必須編寫你的HTML使用內聯代碼。這適用於簡單的用戶界面,但對於更復雜的事物(比如尋呼機和網格視圖)來說,這可能很複雜,也很麻煩。

當您的UI變得複雜時,最簡單的方法是創建HtmlHelper類的擴展。下面是兩個示例,說明如何減少UI的複雜度:HtmlHelper GridViewPager控件。我創建了類似的幫助器方法,並且它非常了不起,您可以在lambda表達式中混合使用html和inline代碼。現在,如果設計師只能夠正確地格式化這種混合代碼/標記...

+0

對不起,我只是說Databinding部分(我知道MVC應該如何工作,我堅持實現細節:)) – Luk 2008-11-11 16:59:05