【问题标题】:Namespace problem .net命名空间问题.net
【发布时间】:2023-03-25 03:56:01
【问题描述】:

我在我的 asp.net 应用程序中创建了一个名为“Controls”的文件夹。在该文件夹中是用户控件(例如,1 是 DateRangePicker.ascx)。现在我正在我的应用程序代码文件夹中创建一个类,并尝试将某些内容投射到 DateRangePicker,

 DateRangePicker drp = (CambitCMS.Controls.DateRangePicker)gvListing.Parent.Parent.FindControl("ucDateRangePicker");

我收到以下错误: 错误 2 命名空间“CambitCMS”中不存在类型或命名空间名称“Controls”(您是否缺少程序集引用?)

如何在类中正确引用此用户控件?

我希望我的“ListingsBasePage”类引用我的 DateRangePicker 用户控件,但是如果我在整个用户控件代码周围放置一个命名空间,它会破坏用户控件,它会说当前不存在文本框、标签等所有内容命名空间包裹代码时的上下文。

这是“ListingsBasePage”类的开始,我试图在其中引用用户控件

 using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;



public partial class ListingsBasePage : System.Web.UI.Page
{

    protected void gvListing_OnPreRender(object sender, EventArgs e)
    {

        protected void gvListing_OnPreRender(object sender, EventArgs e)
        {

            GridView gvListing = (GridView)sender;
            DateRangePicker drp = (CambitCMS.Controls.DateRangePicker)gvListing.Parent.Parent.FindControl("ucDateRangePicker");
            gvListing.PageSize = drp.recordsPerPage;
        }
    ........

以及 DatRangePickerControl 的开始

using System;
using System.Web.UI.HtmlControls;
using System.Web.UI;
using System.Web.UI.WebControls;


    public partial class Controls_DateRangePicker : System.Web.UI.UserControl
    {
        public String FromDate
        {
            get
            {
                return tbFromDate.Text;
            }
        }

【问题讨论】:

  • 您正在使用哪种类型的 ASP.NET 项目,网站或应用程序项目?
  • 你能发布你的 DateRangePicker 代码的前几行吗?特别是命名空间和类定义。

标签: asp.net


【解决方案1】:

网站项目一次又一次地出现这种情况。网站项目中没有命名空间的概念,引用控件可能会出现问题。浏览第一个链接上的一些 cmets:

http://west-wind.com/weblog/posts/3016.aspx

http://forums.asp.net/p/1035070/1428363.aspx

http://www.codersbarn.com/post/2008/06/ASPNET-Web-Site-versus-Web-Application-Project.aspx (披露,这最后一个链接是我自己的博客)

尝试将用户控件放在 App_Code 文件夹中。更好的是,改用 Web 应用程序项目,您应该能够避免这个问题。

更新

解决在网站项目中访问用户控件问题的一种方法是内联代码,然后将用户控件放在 App_Code 文件夹中:

http://odetocode.com/blogs/scott/archive/2005/10/01/asp-net-2-0-user-controls-in-app_code.aspx

就个人而言,这充其量只是一个草率的 hack,Microsoft 不推荐它:

http://msdn.microsoft.com/en-us/library/t990ks23.aspx

我会将其创建为带有 (.cs) 的自定义服务器控件,并将其放在 App_Code 文件夹中。这应该可以解决引用问题。归根结底,网站项目不适合严肃的工作,这只是原因之一。您最好的选择是将其构建为 Web 应用程序项目 - 我想不出选择网站模板的任何合乎逻辑的理由(也可以通过 WAP 获得编译优化)。

【讨论】:

  • 然后尝试在 Web 应用程序项目中测试此场景,以确认这是网站项目模板的问题...
  • 它在网站项目中运行良好。他们希望我将项目转换为网站应用程序。在此类中,对用户控件“DateRangePicker”进行了强制转换,但在网站中我找不到引用它的方法。该类位于应用程序代码文件夹中,而 userControls 位于名为“Controls”的文件夹中
  • 这是在网站项目中引用用户控件时的已知限制,而 Web 应用程序项目不会发生这种情况。我看到的唯一解决方案是将 DateRangePicker 更改为自定义控件或使用 WAP。
  • 这是什么意思? "DateRangePicker 到自定义控件"
  • 问题在于在网站项目中引用用户控件。请参阅上面答案中的更新...
【解决方案2】:

“DateRangePicker.ascx.cs”是实现“CambitCMS.Controls.DateRangePicker”类还是“CambitCMS.DateRangePicker”类?确保命名正确是重点。


“Controls_DateRangePicker”与“CambitCMS.Controls.DateRangePicker”不同是编译器报告错误的原因。在两个文件中使用相同的类名应该没问题,但现在似乎不是那样。


如果将网站设置为 Web 应用程序,则可能必须对其进行编译,以便 Intellisense 可以获取类名,如果您在后面的 C# 代码中更改它,则必须更新 .ascx 文件你的另一个错误在哪里。

【讨论】:

  • 这不起作用 Controls_DateRangePicker 由于某种原因不在智能感知中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 2011-02-08
  • 2013-03-26
相关资源
最近更新 更多