2011-03-02 132 views
1

我在我的asp.net应用程序中创建了一个名为“Controls”的文件夹。在该文件夹中是用户控件(例如1是DateRangePicker.ascx)。现在我创造我的应用程序代码文件夹中的类,我想投的东西到DateRangePicker,命名空间问题.net

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

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

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

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

这里是类 “ListingsBasePage” 我在哪里triyng引用用户控件

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; 
      } 
     } 
+0

你正在使用什么类型的ASP.NET项目,网站或应用程序项目? – IrishChieftain 2011-03-02 20:16:34

+0

asp.net网站 – 2011-03-02 20:26:11

+0

你可以发布DateRangePicker代码的前几行吗?特别是名称空间和类定义。 – 2011-03-02 20:29:02

回答

2

这出现一次又一次与网站项目。在网站项目中没有名称空间的概念,并且引用控件可能会有问题。通过一些第一链路上的评论转到:

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应用程序项目,你应该能够避免这个问题。

UPDATE各地的网站项目的访问用户控件的问题

一种方法是内联代码,然后把在App_Code文件夹的用户控制:

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

个人而言,这是一个sl ha的黑客,微软不推荐它:

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

我会创建它作为自定义服务器控件(.cs)并将其放在App_Code文件夹中。这应该解决参考问题。最终,网站项目不适合认真工作,这只是其中一个原因。你最好的选择是将其作为一个Web应用程序项目 - 我想不出选择网站模板的任何逻辑原因(编译优化也可以通过WAP获得)。

+0

它不会让你在应用程序代码文件夹中的用户控件 – 2011-03-02 21:02:11

+0

然后尝试在Web应用程序项目中测试此方案以确认它是与网站项目模板的问题... – IrishChieftain 2011-03-02 21:13:37

+0

它在一个网站项目罚款。他们希望我将该项目转换为网站应用程序。在这个类中有一个用户控件“DateRangePicker”的强制转换,但是在一个网站中我找不到引用它的方法。该类位于应用程序代码文件夹中,并且userControls位于名为“Controls”的文件夹中 – 2011-03-02 21:17:15

0

开始这是否“DateRangePicker.ascx.cs “实现”CambitCMS.Controls.DateRangePicker“类还是”CambitCMS.DateRangePicker“类?确保命名是正确的是这里的一点。


“Controls_DateRangePicker”是不一样的“CambitCMS.Controls.DateRangePicker”是为什么编译器报告错误。在这两个文件中使用相同的类名,它应该没问题,但现在看起来不是那样。


如果网站被设置为一个Web应用程序,它可能要被编译,以便智能感知可以拿起,如果你改变它在C#代码,后面你必须更新类的名称。 ascx文件可能是您的其他错误所在。

+0

请参阅上面我编辑的问题 – 2011-03-02 20:31:01

+0

这does not工作Controls_DateRangePicker不在intelisense由于某种原因 – 2011-03-02 20:44:11