【问题标题】:ASP.Net MVC framework and databindingASP.Net MVC 框架和数据绑定
【发布时间】:2008-11-11 15:07:11
【问题描述】:

我在掌握 MVC 框架背后的一些概念时遇到了一些困难。我正在做一个对产品进行分类的非常简单的应用程序。

创建屏幕将简单地使用一个下拉列表,显示类别列表、产品名称和提交。

在普通的 .Net 应用程序中,我会在 Page_Load 中对服务器下拉列表进行数据绑定,但在 MVC 应用程序中,从数据库中检索我的类别并将它们添加到下拉列表中的最佳方法是什么?

(对不起,我的问题非常愚蠢,但不幸的是 MVC 上的资源是空闲的,并且由于早期的更改,示例经常被破坏)

【问题讨论】:

    标签: .net asp.net-mvc


    【解决方案1】:

    我不确定我是否完全掌握,但如果您的页面显示单个产品并且唯一的用户输入只是从下拉列表中选择一个类别,我可以提供帮助(但我是菜鸟也是!)。

    引用此页面:

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

    您将要在控制器中为类别创建一个 SelectList(可能引用一个 ID,并显示一个名称)。然后将此 SelectList 添加到您的 ViewData。您也可以将其设置为您的 ViewData.Model 的一部分并从您的视图中引用它。

    在您看来,您将 HtmlHelper 用于以 SelectList 作为参数的 DropDownList。

    上面的链接应该能更好地传达它,这只是一个简短的总结。该链接适用于预览版 3,但我认为它应该仍然适用。

    【讨论】:

      【解决方案2】:

      您的模型检索数据,您的演示者为视图组织数据,视图控件将您的模型绑定到 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,但在涉及更复杂的事物(例如寻呼机和网格视图)时可能会很复杂并且很乏味。

      当您的 UI 变得复杂时,最简单的做法是创建 HtmlHelper 类的扩展。这里有两个例子展示了如何减少 UI 的复杂性:HtmlHelper GridViewPager 控件。我已经创建了类似的辅助方法,以及如何在 lambdas 中混合 html 和内联代码,这非常了不起。现在,如果设计师只能体面地格式化这种混合代码/标记......

      【讨论】:

      • 抱歉,我只指数据绑定部分(我知道 MVC 应该如何工作,我一直停留在实现细节上 :))
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      相关资源
      最近更新 更多