ASP.Net MVC框架和数据绑定

3
我有些难以理解MVC框架背后的一些概念。我正在做一个非常简单的应用程序,对产品进行分类。
创建屏幕将简单地使用下拉列表显示类别列表、产品名称和提交按钮。
在普通的.Net应用程序中,我会在Page_Load中绑定服务器下拉列表,但在MVC应用程序中,从数据库检索类别并将其添加到下拉列表的最佳方法是什么?
(很抱歉,我的问题非常新手,但不幸的是MVC资源很少,而且例子经常因为早期更改而损坏)
2个回答

4
我不确定我是否完全理解了,但如果您的页面显示单个产品,并且唯一的用户输入仅是从下拉列表中选择类别,我可以帮忙(但我也是一个新手!)。
参考此页面:

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

您需要在控制器中创建一个 SelectList 以供类别使用(可能引用 ID 并显示名称)。然后将此 SelectList 添加到 ViewData 中。您还可以将其设置为 ViewData.Model 的一部分,并从视图引用它。
在视图中,您可以使用 HtmlHelper 来创建 DropDownList,该方法接受 SelectList 作为参数。
上面的链接应该更好地传达了这些信息,这只是一个快速摘要。该链接适用于预览 3,但我认为它仍然适用。

0

你的模型检索数据,你的 presenter 为视图组织数据,而视图控制将你的模型绑定到 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 控件。我创建了类似的辅助方法,令人惊讶的是你可以在lambda中混合html和内联代码。现在如果设计师能够适当地格式化这种混合代码/标记...


抱歉,我只是指数据绑定部分(我知道MVC应该如何工作,但我卡在了实现细节上 :))。 - Luk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接