我在asp.net应用程序中创建了一个名为“Controls”的文件夹。在该文件夹中是用户控件(例如,1是DateRangePicker.ascx)。现在我在我的应用程序代码文件夹中创建一个类,我正在尝试将某些东西投射到DateRangePicker,
DateRangePicker drp = (CambitCMS.Controls.DateRangePicker)gvListing.Parent.Parent.FindControl("ucDateRangePicker");
我收到以下错误: 错误2名称空间'CambitCMS'中不存在类型或命名空间名称'Controls'(您是否缺少程序集引用?)
如何在课程中正确引用此用户控件?
我想让我的“ListingsBasePage”类引用我的DateRangePicker用户控件,但是如果我在整个用户控件代码周围放置一个命名空间就会破坏用户控件,它会说当前所有的文本框,标签等内容都不存在将命名空间包裹在代码中时的上下文。
以下是“ListingsBasePage”类的开头,我在这里引用了usercontrol
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 :(得分: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应用程序项目,你应该能够避免这个问题。
<强>更新强>
解决网站项目中访问用户控件问题的一种方法是内联代码,然后将用户控件放在App_Code文件夹中:
http://odetocode.com/blogs/scott/archive/2005/10/01/asp-net-2-0-user-controls-in-app_code.aspx
就个人而言,这是一个草率的黑客,微软不推荐它:
http://msdn.microsoft.com/en-us/library/t990ks23.aspx
我会将其创建为带有(.cs)的自定义服务器控件,并将其放在App_Code文件夹中。这应该解决引用问题。最终,网站项目并非用于认真的工作,这只是其中一个原因。您最好的选择是将其构建为Web应用程序项目 - 我无法想到选择网站模板的任何逻辑原因(编译优化也可以通过WAP获得)。
答案 1 :(得分:0)
“DateRangePicker.ascx.cs”是否实现了“CambitCMS.Controls.DateRangePicker”类或“CambitCMS.DateRangePicker”类?确保命名正确是这里的一点。
“Controls_DateRangePicker”与“CambitCMS.Controls.DateRangePicker”不同,是编译器报告错误的原因。在两个文件中使用相同的类名,它应该没问题,但现在它看起来不是那样。
如果网站设置为Web应用程序,则可能必须对其进行编译,以便Intellisense可以获取类名,如果您在后面的C#代码中更改它,则必须更新.ascx文件你的其他错误在哪里。