你的模型检索数据,你的 presenter 为视图组织数据,而视图控制将你的模型绑定到 UI 元素。例如,这是一个 LogEvent 的模型:
public class LogEvent{
public string Title {get;set;}
public string Date {get;set;}
public string Message {get;set;}
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;}
[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和内联代码。现在如果设计师能够适当地格式化这种混合代码/标记...