2008-11-11 66 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