[英]ASP.Net MVC framework and databinding
我在掌握MVC框架背后的一些概念時遇到了一些麻煩。 我正在做一個非常簡單的應用程序,它對產品進行分類。
創建屏幕將使用下拉列表顯示類別列表,產品名稱和提交。
在普通的.Net應用程序中,我會在Page_Load中對數據庫下拉列表進行數據綁定,但在MVC應用程序中,從數據庫中檢索我的類別並將其添加到下拉列表的最佳方法是什么?
(對不起,我的問題非常無聊,但遺憾的是MVC上的資源很多,而且由於早期的更改,示例經常被打破)
我不確定我是否完全掌握,但如果您的頁面顯示單個產品而且唯一的用戶輸入只是從下拉列表中選擇一個類別,我可以幫助排序(但我也是菜鳥!) 。
參考此頁面:
http://weblogs.asp.net/scottgu/archive/2008/05/27/asp-net-mvc-preview-3-release.aspx
您將要在控制器中為類別創建一個SelectList(可能引用一個ID,並顯示一個名稱)。 然后,將此SelectList添加到ViewData。 您也可以將其設置為ViewData.Model的一部分,並從View中引用它。
在您的視圖中,您使用HtmlHelper for DropDownList,將SelectList作為參數。
上面的鏈接應該更好地傳達它,這只是一個快速的總結。 該鏈接用於預覽3,但我認為它應該仍然適用。
模型檢索數據,演示者為視圖組織數據,視圖控件將模型綁定到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 GridView和Pager控件。 我已經創建了類似的幫助方法,並且你可以在lambdas中混合使用html和內聯代碼。 現在,如果設計師只能正確地格式化這種混合代碼/標記......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.