3

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

我的项目类型是一个典型的 C# 类库,为 system.web.mvc 和朋友添加了引用。

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

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

即使我在 namespace 下的同一个项目中有另一个公共类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 的引用。但是,在代码隐藏文件的 using 部分中,当我键入“using System.”时,自动完成功能甚至不会将 System.Web 或 System.Web.Mvc 显示为可用选项。就好像它们不存在于光盘上。其他项目能够包含它们并很好地引用它们。我想这是我问题的根源,所以我希望一旦我弄清楚这一点,其余的就会到位。想法?

4

2 回答 2

0

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

于 2009-06-26T21:01:59.747 回答
0

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

(更新)我昨晚发现的另一个提示是,我的插件还必须位于应用程序的 /bin 目录以及 /widgets 目录中,否则我会收到“无法加载类型...”异常。我还没有想出如何连接 ASP.NET MVC,所以我只需要将它放在一个地方,但是当我这样做时,我会在这里发回。

于 2009-06-29T17:05:31.943 回答