假设我有一个索引视图。我传入的模型实际上是模型的集合,因此Html
属性的类型为HtmlHelper<List<MyModel>>
。如果我想在列表中的单个项目上调用扩展方法(例如,Display()
或DisplayFor()
,我认为我需要获得HtmlHelper<MyModel>
。但是如何?
我尝试使用HtmlHelper<TModel>
构造函数,如下所示:
HtmlHelper<TModel>(ViewContext, IViewDataContainer)
但我没有运气。我不知道如何获得该项目的IViewDataContainer
,并且关于这些内容的文档非常稀疏。
当我这么做时,很多魔法显然会发生......
return View(List<MyModel>);
...在我的控制器中。
如何在列表/集合中的单个项目上重新创建魔法?
更新
以下是一段代码片段,展示了我要完成的工作:
foreach(var item in items)
{
var helper = new HtmlHelper<ProjName.MyModel>(ViewContext, ????);
%>
<tr>
<%
foreach(var property in properties)
{
%>
<td>
<%= helper.Display(property.DisplayName) %>
</td>
<%
}
%>
</tr>
<%
}
基本上,我想使用集合中的项目填充表格的单元格。我只需要帮助设置helper
变量。
答案 0 :(得分:2)
一个想法是使用RenderPartial。因此,创建一个具有模型类型(MyModel)的用户控件。然后在主视图中添加以下代码。
<% Html.RenderPartial("SubView", property); %>
所以主视图如下:
foreach(var item in items)
{
%>
<tr>
<%
foreach(var property in properties)
{
%>
<td>
<%= Html.RenderPartial("SubView", property) %>
</td>
<%
}
%>
</tr>
<%
}
%>
然后子视图将是类型的强类型用户控件。然后子视图可以调用帮助程序,它的类型正确:
<%= Html.Display(Model.DisplayName) %>
答案 1 :(得分:1)
答案 2 :(得分:0)
页面本身是 IViewDataContainer
。您可以尝试:
foreach(MyModel m in Model)
{
HtmlHelper helper = new HtmlHelper<MyModel>(ViewContext, this);
...
}
击> 更新
另一个想法是:您可以创建ViewUserControl<MyModel>
并使用RenderPartial
使用此控件呈现每个项目。 ViewUserControl<MyModel>
公开了可用于呈现模型的HtmlHelper<MyModel>