当前位置:  开发笔记 > 编程语言 > 正文

通用局部视图:如何将泛型类设置为模型?

如何解决《通用局部视图:如何将泛型类设置为模型?》经验,为你挑选了2个好方法。

我正在尝试在ASP.NET MVC应用程序中构建通用网格视图.

让我解释一些代码:

public interface ITrustGrid
{
    IPagedList Elements { get; set; }
    IList> Columns { get; set; }
    IList Headers { get; }
}

这是一个类的接口,允许我在控制器中设置列和表达式.

我将实现传递给部分视图,如下所示:

<% Html.RenderPartial("SimpleTrustGridViewer", ViewData["employeeGrid"] as TrustGrid); %>

问题是我无法弄清楚如何使局部视图呈现网格通用.

换句话说,我想转此:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl>" %>

进入这样的事情:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl>" %>

=>如何以最简单的方式使我的部分视图通用?

编辑:

我通过使用具有公共TrustGrid GetTrustGrid()方法的TrustGridBuilder解决了这个问题,该方法返回非通用的TrustGrid.TrustGrid包含字符串而不是linq的东西.所以我在GetTrustGrid()方法中执行linq并将字符串放在TrustGrid对象中.

感谢大家帮助我走上正轨.



1> Adam Carr..:

您可以将所有要传递到此部分继承的模型类型从基类/接口继承,该基类/接口建立此部分视图将使用的基本行为并接受该类/接口类型的任何对象,或者仅具有该视图接受任何类型的对象,然后使用反射来基于您的局部视图行为.

例:

public interface IDisplayModel
{
    string DisplayText{get;set;}
    string ImageUrl{get;set;}
    string AltText{get;set;}
}

public interface ITrustGrid where T : IDisplayModel
{    
    IPagedList Elements { get; set; }    
    IList> Columns { get; set; }    
    IList Headers { get; }
}

<%@ Control Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl>" %>

当然,您IDisplayModel会根据您的期望行为而有所不同.这将允许您将任何内容传递给实现此基接口的部分以建立一般行为.



2> Mehrdad Afsh..:

不可能那样做。原因是.aspx将生成一个您没有太多控制权且无法向其添加通用参数的类。我猜最直接的方法是将它传递为object

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有