我正在尝试将强类型对象传递给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)
{
// ...
}
%>
答案 0 :(得分:1)
ViewData
只包含string
- &gt;的映射object
。您需要将其强制转换为强类型视图所期望的类型:
<% Html.RenderPartial("UserControl", (Data) ViewData["Data"]); %>
就个人而言,我建议您使所有强类型,并完全避免使用ViewData
,但我知道并非总是可行:)