代码之家  ›  专栏  ›  技术社区  ›  Jason Barile

如何将ASP.NET MVC用户控件构建到类库中

  •  3
  • Jason Barile  · 技术社区  · 17 年前

    我正在尝试将一些.ascx控件构建到我正在构建的CMS插件类库中。

    我的项目类型是一个典型的C#类库,为system.web.mvc&朋友。

    我的问题出现在尝试创建强类型用户控件时。我的控件如下所示:

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

    即使我在同一项目的名称空间下有另一个公共类 TagCloudWidget.Models ,我好像拿不到 .ascx 文件来识别这一点。我试过包括 Imports 对于名称空间,但它只是抱怨名称空间不存在。TagCloudData类文件如下所示:

    namespace TagCloudWidget.Models
    {
    public class TagCloudWidgetData
    {
        public IList<TagCount> TagCounts { get; set; }
        public ContentTypes ContentType;
        public string Controller;
        public string Action;
    
        public TagCloudWidgetData(IList<TagCount> tagCounts, ContentTypes contentType, string controller, string action)
        {
            TagCounts = tagCounts;
            ContentType = contentType;
            Controller = controller;
            Action = action;
        }
    }
    }
    

    你能看出我做错了什么吗?

    根据下面的建议,我尝试添加一个代码隐藏文件。我想我更接近于找出问题所在,但我仍然无法找到解决方案。在项目中,我添加了对System.Web和System.Web.Mvc的引用。但是,在codebehind文件的using部分,当我键入“using System.”时,auto complete甚至不会显示System.Web或System.Web.Mvc作为可用选项。就好像它们根本不存在于光盘上。其他项目能够包含它们并引用它们。我想这是我的问题的根源,所以我希望一旦我弄明白了这一点,其余的问题就会迎刃而解。思想?

    2 回复  |  直到 17 年前
        1
  •  0
  •   tvanfosson    17 年前

    我在beta版启动的应用程序中也遇到过类似的问题。我发现唯一有效的方法是为控件创建一个代码隐藏文件,并在代码隐藏中定义继承。然后在控件中,让它从代码隐藏中定义的类继承。在使用1.0从头开始构建的较新项目中,我没有这个问题——但是我也没有在库中定义我的分部类。

        2
  •  0
  •   Jason Barile    17 年前

    成功不知怎的,我的.ascx文件在文件属性中被标记为“content”,而不是“compile”。一旦我解决了这个问题,我现在就可以引用必要的程序集,并且可以毫无问题地加载/运行插件。感谢您提供有关代码隐藏文件的提示!