MVC 3 - 访问 IEnumerable 模型的 ModelMetaData?

发布于 2024-10-20 03:13:29 字数 962 浏览 2 评论 0 原文

我正在尝试访问我正在处理的自定义 HtmlHelper 的 ModelMetaData。 HtmlHelper 有一个像这样的签名...

public static MvcHtmlString DataGrid<T>(this HtmlHelper<T> htmlHelper){}

(Razor)视图看起来像这样...

@model IEnumerable<LogMyAssets.Models.ContactModel>
....
@Html.DataGrid()

我的问题是我无法访问模型的 ModelMetaData,因为它是 IEnumerable。我以为我 可以执行以下操作:

var model = (IEnumerable<T>)htmlHelper.ViewData.Model;
var metaData = model.ElementAt(0).GetMetadata();

public static ModelMetadata GetMetadata<TModel>(this TModel model)
{
   return ModelMetadataProviders.Current.GetMetadataForType(null, typeof(TModel));
}

但奇怪的是,我收到以下错误:

Unable to cast object of type 'System.Collections.Generic.List`1[LMA.Models.ContactModel]' 
to type 'System.Collections.Generic.IEnumerable`1[System.Collections.Generic.IEnumerable`1

我虽然可以从通用列表转换为通用 IEnumerable。我错过了什么吗?

I'm trying to access the ModelMetaData for a Custom HtmlHelper that I'm working on. The HtmlHelper has a signature like so ...

public static MvcHtmlString DataGrid<T>(this HtmlHelper<T> htmlHelper){}

The (Razor) View looks like this ...

@model IEnumerable<LogMyAssets.Models.ContactModel>
....
@Html.DataGrid()

My problem is that I can't access the ModelMetaData for the Model as it's IEnumerable. I thought I
could do the following:

var model = (IEnumerable<T>)htmlHelper.ViewData.Model;
var metaData = model.ElementAt(0).GetMetadata();

public static ModelMetadata GetMetadata<TModel>(this TModel model)
{
   return ModelMetadataProviders.Current.GetMetadataForType(null, typeof(TModel));
}

But stangely enough I get the following error:

Unable to cast object of type 'System.Collections.Generic.List`1[LMA.Models.ContactModel]' 
to type 'System.Collections.Generic.IEnumerable`1[System.Collections.Generic.IEnumerable`1

I though I could could cast from Generic List to Generic IEnumerable. Am I missing something?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

离鸿 2024-10-27 03:13:29

我不太明白 T 是在 (IEnumerable) 中定义的,但是我的猜测是 T 已经是 IEnumerable,这意味着您正在尝试转换为 IEnumerable>

I don't really understand where the T is defined in (IEnumerable<T>), however my Guess is that T is already IEnumerable<something>, which means you're trying to cast to IEnumerable<IEnumerable<something>>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文