jjn*_*guy 9 c# generics razor asp.net-mvc-3
我正在尝试编写一个通用(在许多地方有用)控件,我可以在整个公司中重复使用.
我在视图和viewmodel中遇到了实际的C#泛型问题.
这是我正在尝试做的一个例子:
通用局部视图:( _Control.cshtml)
@model SimpleExample<dynamic>
@Model.HtmlTemplate(Model.Data)
Run Code Online (Sandbox Code Playgroud)
ViewData :( SimpleExample.cs)
public class SimpleExample<T>
{
public T Data;
public Func<T, System.Web.WebPages.HelperResult> HtmlTemplate;
}
Run Code Online (Sandbox Code Playgroud)
用法示例:( FullView.cshtml)
@model Foo.MyViewData
@Html.Partial("_Control", new SimpleExample<MyViewData>
{
Data = Model,
HtmlTemplate = @<div>@item.SomeProperty</div>
})
Run Code Online (Sandbox Code Playgroud)
我正在寻找的功能的重要部分是消费者在编写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]'.
Run Code Online (Sandbox Code Playgroud)
我已经读过,我可以在我的泛型类型上使用covarience来实现这一点,但我不知道该怎么做.
你能告诉我怎么能让这个工作吗?
更改定义_Control.cshtml:
@model SimpleExample<dynamic>到@model dynamic。
它会工作,但会失去智能感知SimpleExample,智能感知MyViewData仍然有效。
我认为这是因为动态类型将在运行时已知,但泛型的类型
需要一个早期的时间(也许是编译时间),在那时,只有object被知道。
| 归档时间: |
|
| 查看次数: |
1598 次 |
| 最近记录: |