【问题标题】:How to build ASP.NET MVC user controls into class libraries如何将 ASP.NET MVC 用户控件构建到类库中
【发布时间】:2009-06-26 20:50:25
【问题描述】:

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

【问题讨论】:

    标签: asp.net-mvc plugins using


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我会试试的。这是一个使用 1.0 从头开始​​构建的新项目,所以也许我们仍然缺少一些小块的拼图。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 2017-07-14
      • 2011-06-23
      • 2010-09-06
      相关资源
      最近更新 更多