如何在ASP.NET MVC中获取模型的HtmlHelper <tmodel>实例?</tmodel>

时间:2010-03-29 20:50:26

标签: c# asp.net-mvc

假设我有一个索引视图。我传入的模型实际上是模型的集合,因此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变量。

3 个答案:

答案 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>