用户控件和强类型数据

时间:2010-06-24 00:51:58

标签: asp.net-mvc user-controls

我正在尝试将强类型对象传递给UserControl,但我无法做到。我肯定错过了什么。所以我的User Control需要一个Data类型的对象,它包含一个string列表。在我的页面上,我使用我的用户控件名称和数据调用RenderPartial。但是,当页面运行时,它表示this.Model(或this.ViewData.Model)为null。为什么?我错过了什么?

Page.aspx

<% Html.RenderPartial("UserControl", ViewData["Data"]); %>

PageController.cs

ViewData["Data"] = new Data() 
{ 
    Links = new List<Link> 
    { 
    } 
};

Data.cs

public class Data
{
    public List<string> Links { get; set; }
}

UserControl.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Proto.Models.Data>" %> 
    <% 
        foreach (var link in this.Model.Links)
        { 
           // ...
        }
    %>

1 个答案:

答案 0 :(得分:1)

ViewData只包含string - &gt;的映射object。您需要将其强制转换为强类型视图所期望的类型:

<% Html.RenderPartial("UserControl", (Data) ViewData["Data"]); %>

就个人而言,我建议您使所有强类型,并完全避免使用ViewData,但我知道并非总是可行:)