我正在尝试在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对象中.
感谢大家帮助我走上正轨.
您可以将所有要传递到此部分继承的模型类型从基类/接口继承,该基类/接口建立此部分视图将使用的基本行为并接受该类/接口类型的任何对象,或者仅具有该视图接受任何类型的对象,然后使用反射来基于您的局部视图行为.
例:
public interface IDisplayModel { string DisplayText{get;set;} string ImageUrl{get;set;} string AltText{get;set;} } public interface ITrustGridwhere T : IDisplayModel { IPagedList Elements { get; set; } IList > Columns { get; set; } IList Headers { get; } } <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl >" %>
当然,您IDisplayModel
会根据您的期望行为而有所不同.这将允许您将任何内容传递给实现此基接口的部分以建立一般行为.
不可能那样做。原因是.aspx
将生成一个您没有太多控制权且无法向其添加通用参数的类。我猜最直接的方法是将它传递为object
。