我正在尝试编写一个通用(意味着在许多地方都很有用)控件,我可以在整个公司中重用它。
我的视图和视图模型中的实际 C# 泛型存在问题。
这是我正在尝试做的一个例子:
通用局部视图:( _Control.cshtml
)
@model SimpleExample<dynamic>
@Model.HtmlTemplate(Model.Data)
查看数据:( SimpleExample.cs
)
public class SimpleExample<T>
{
public T Data;
public Func<T, System.Web.WebPages.HelperResult> HtmlTemplate;
}
示例用法:( FullView.cshtml
)
@model Foo.MyViewData
@Html.Partial("_Control", new SimpleExample<MyViewData>
{
Data = Model,
HtmlTemplate = @<div>@item.SomeProperty</div>
})
我正在寻找的功能的重要部分是消费者在编写其 Html 内联时会获得一个类型化的对象,以便他们可以使用 Intellisense(如参考资料中所示FullView.cshtml
)。
一切都编译得很好并且智能感知正在工作,但我在运行时收到错误:
The model item passed into the dictionary is of type
'AnytimeHealth.Web.ViewData.SimpleExample`1[Foo.MyViewData]',
but this dictionary requires a model item of type
'AnytimeHealth.Web.ViewData.SimpleExample`1[System.Object]'.
我读过我可能可以在我的泛型类型上使用协方差来让它工作,但我不知道该怎么做。
你能指导我如何让这个工作吗?