2010-06-24 272 views
1

我想将强类型对象传递给UserControl,但我无法通过。我肯定错过了什么。所以我的用户控件需要一个Data类型的对象,它包含一个字符串列表。在我的页面上,我用我的用户控件的名称和数据调用RenderPartial。但是,页面运行时,它说this.Model(或this.ViewData.Model)为空。为什么?我错过了什么?用户控件和强类型数据

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) 
     { 
      // ... 
     } 
    %> 
+0

你可以显示操作方法吗? – 2010-06-24 07:20:08

回答

1

ViewData只包含的string的映射 - >object。你需要将它转换为类型的强类型的视图期待:

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

就个人而言,我会建议你做一切强类型的,并且避开使用ViewData完全,但我明白这并不总是可能:)