【问题标题】:Accessing a generic collection from view model in html helper在 html 帮助器中从视图模型访问通用集合
【发布时间】:2013-04-17 22:39:00
【问题描述】:

我正在尝试编写一个 html 帮助程序,我想在其中迭代作为通用列表的已知类型属性,并输出所需的 HTML 内容。以下是我如何构建视图模型以确保任何视图模型都符合帮助程序的概述;

接口定义:

public Interface ITheViewModelInterface<T> where T : class
{
    IEnumerable<T> Items { get; set; }
}

具体的抽象接口实现(以便我可以定义默认值):

public abstract class TheConcreteViewModelImplementation<T> : IViewModelInterface<T> where T : class
{
    public virtual IEnumerable<T> Items { get; set; }
}

视图模型:

public class TheViewModel : TheConcreteViewModelImplementation<MyListType>
{ 

}

帮助器定义是什么,以便我可以访问基类中正确键入的项目列表?我不完全确定在这种情况下我需要一个强类型的帮助器,但是如何在帮助器调用中显式传递项目类型?

【问题讨论】:

  • 您是否考虑过改用Display Templates
  • @levelnis,不,我没有深入研究过显示模板。您认为这种方法更适合我的要求吗?
  • 我认为它可能非常适合。您需要在Views\Shared\DisplayTemplates 中创建一个与其所代表的类型同名的模板(例如MyListType.cshtml),然后调用Html.DisplayFor(m =&gt; m.Items) 来渲染您的项目。
  • 嗯...好的,我会更深入地看看。我宁愿希望访问整个模型,因为我需要其他属性。显示模板可以做到这一点吗?
  • 当然是 - 您可以使用 Html.DisplayForModel() 并为模型中包含的每种数据类型创建模板(或使用框架中的默认模板)。看看 Brad 系列的第 4 部分 - 它很好地解释了自定义默认对象模板

标签: asp.net-mvc razor


【解决方案1】:

在对这个问题进行了更多研究之后,我发现这个讨论为我的问题提供了一些答案(以及微软的一个相当惊人的声明!);

ASP.NET MVC 3 HtmlHelper Exception does not recognize ModelMetadata on inherited interface

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2011-09-08
    • 2012-01-28
    • 2012-08-23
    相关资源
    最近更新 更多