【发布时间】:2010-03-14 20:45:53
【问题描述】:
我正在尝试为索引视图编写一个自动脚手架模板。我希望能够传入模型或视图模型的集合(例如,IQueryable<MyViewModel>)并返回一个 HTML 表格,该表格使用DisplayName 属性作为标题(th 元素)和@987654324 @ 用于单元格(td 元素)。每行应对应集合中的一项。
这是我目前所拥有的:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%
var items = (IQueryable<TestProj.ViewModels.TestViewModel>)Model;
// How do I make this generic?
var properties = items.First().GetMetadata().Properties
.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm));
%>
<table>
<tr>
<%
foreach(var property in properties)
{
%>
<th>
<%= property.DisplayName %>
</th>
<%
}
%>
</tr>
<%
foreach(var item in items)
{
HtmlHelper itemHtml = ????;
// What should I put in place of "????"?
%>
<tr>
<%
foreach(var property in properties)
{
%>
<td>
<%= itemHtml.Display(property.DisplayName) %>
</td>
<%
}
%>
</tr>
<%
}
%>
</table>
这有两个问题:
我希望它是通用的。所以,我想用
var items = (IQueryable<T>)Model;或类似的东西替换var items = (IQueryable<TestProj.ViewModels.TestViewModel>)Model;。创建视图时会自动为我创建属性
Html,但此HtmlHelper适用于整个集合。我需要以某种方式创建一个itemHtml对象,该对象仅适用于foreach循环中的当前项目。但是,我不确定如何执行此操作,因为HtmlHelper的构造函数不采用Model对象。
我该如何解决这两个问题?
【问题讨论】:
标签: c# html asp.net-mvc templates