English 中文(简体)
ASP.Net MVC框架和数据绑定
原标题:
  • 时间:2008-11-11 15:07:11
  •  标签:

我对MVC框架背后的某些概念感到困惑。我正在做一个非常简单的应用程序,对产品进行分类。

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

在一般的.Net应用中,我会在Page_Load中数据绑定一个服务器下拉框,但在MVC应用中,如何从数据库中检索我的类别并将其添加到下拉列表中是最好的方法?

对不起,我的问题非常初级,但是不幸的是 MVC 的资源很稀缺,并且示例经常因为早期更改而无法正常使用。

最佳回答

我不确定我完全明白,但如果您的页面显示单个产品,唯一的用户输入只是从下拉列表中选择一个类别,我可以帮忙(但我也是新手!)。

引用此页面:

ASP.NET MVC 预览版 3 发布。

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

在您的看法中,您可以使用HtmlHelper为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非常有效,但在更复杂的事情上(例如分页器和网格视图)可能会变得复杂和乏味。

当你的UI变得复杂时,最容易的做法是创建HtmlHelper类的扩展。以下是两个示例,展示了如何简化UI:HtmlHelper GridView和Pager控件。我创建了类似的辅助方法,很难相信你可以在lambda内混合html和内联代码。现在,如果设计师能够很好地格式化这种混合的代码/标记就好了...





相关问题
热门标签