如何获取命名空间中的控件id(gridview,label等)
本想偷懒,使用了Article的模版建立.net网站,结构发现了2个头疼的命名空间。在default页面没法调用gridview等控件的id。求高手指点。using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.Design;
using System.ComponentModel;
namespace Artisteer
{
[ParseChildren(true)]
[Designer(typeof(BlockDesigner))]
public class Block : WebControl
{
public ITemplate _contentTemplate = null;
private PlaceHolder _headerPlaceholder = null;
private PlaceHolder _contentPlaceholder = null;
private string _caption;
public string Caption
{
get { return _caption; }
set { _caption = value; }
}
[Browsable(false)]
[TemplateContainer(typeof(TemplateContainer))]
[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ITemplate ContentTemplate
{
get { return _contentTemplate; }
set { _contentTemplate = value; }
}
public PlaceHolder HeaderPlaceholder
{
get { return _headerPlaceholder; }
set { _headerPlaceholder = value; }
}
public PlaceHolder ContentPlaceholder
{
get { return _contentPlaceholder; }
set { _contentPlaceholder = value; }
}
protected override void CreateChildControls()
{
Controls.Clear();
Control blockMarkup = Page.LoadControl("~/Design/Block.ascx");
_headerPlaceholder = blockMarkup.FindControl("HeaderPlaceholder") as PlaceHolder;
_contentPlaceholder = blockMarkup.FindControl("ContentPlaceholder") as PlaceHolder;
_headerPlaceholder.Visible = ! String.IsNullOrEmpty(_caption);
if (_headerPlaceholder.Visible)
{
Literal caption = new Literal();
caption.Text = _caption;
_headerPlaceholder.Controls.Add(caption);
}
if (_contentTemplate != null)
{
TemplateContainer container = new TemplateContainer();
_contentTemplate.InstantiateIn(container);
_contentPlaceholder.Controls.Add(container);
}
Controls.Add(blockMarkup);
}
public override void DataBind()
{
EnsureChildControls();
base.DataBind();
}
protected override HtmlTextWriterTag TagKey
{
get { return HtmlTextWriterTag.Div; }
}
public class TemplateContainer : Control, INamingContainer
{
}
}
public class BlockDesigner : ContainerControlDesigner
{
public override string FrameCaption
{
get
{
Block ctl = this.Component as Block;
return ctl.Caption;
}
}
}
}
default.aspx中
<%@ Page Language="C#" MasterPageFile="~/design/MasterPage.master" ValidateRequest="false" AutoEventWireup="true" CodeFile="details.aspx.cs" Inherits="details" Title="Untitled Page" %>
<%@ Import Namespace="Artisteer" %>
<%@ Register TagPrefix="artisteer" Namespace="Artisteer" %>
<%@ Register TagPrefix="art" TagName="DefaultMenu" Src="DefaultMenu.ascx" %>
<%@ Register TagPrefix="art" TagName="DefaultHeader" Src="DefaultHeader.ascx" %>
<%@ Register TagPrefix="art" TagName="DefaultSidebar1" Src="DefaultSidebar1.ascx" %>
<%@ MasterType VirtualPath="~/design/MasterPage.Master" %>
<asp:Content ID="PageTitle" ContentPlaceHolderID="TitleContentPlaceHolder" Runat="Server">
</asp:Content>
<asp:Content ID="MenuContent" ContentPlaceHolderID="MenuContentPlaceHolder" Runat="Server">
<art:DefaultMenu ID="DefaultMenuContent" runat="server" />
</asp:Content>
<asp:Content ID="HeaderContent" ContentPlaceHolderID="HeaderContentPlaceHolder" Runat="Server">
<art:DefaultHeader ID="DefaultHeader" runat="server" />
</asp:Content>
<asp:Content ID="SideBar1" ContentPlaceHolderID="Sidebar1ContentPlaceHolder" Runat="Server">
<art:DefaultSidebar1 ID="DefaultSidebar1Content" runat="server" />
</asp:Content>
<asp:Content id="SheetContent" ContentPlaceHolderID="SheetContentPlaceHolder" Runat="Server">
<artisteer:Block ID="NewsletterBlock" Caption="" runat="server">
<ContentTemplate><div>
<input type="text" value="" name="email" id="search_text" style=" font-size:14px; color:#999;width: 95%; height:20px;" />
<span class="art-button-wrapper">
<span class="l"> </span>
<span class="r"> </span>
<asp:Button class="art-button" ID="Button1" runat="server" OnClick="Button1_Click" Text="查询" /></span></div>
</ContentTemplate>
</artisteer:Block>
<artisteer:Article ID="Article1" Caption="" runat="server" />
<artisteer:Block id="HighlightsBlock2" Caption="" runat="server" >
<ContentTemplate>
<div style="width:50%; float:left;" id="hhs" runat="server">
<asp:GridView ID="GridView1" runat="server">
</asp:GridView> </div>
<div style="width:50%; float:left;" id="hh" runat="server">
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
<div id="dd" style="width:50%; float:left;" runat="server">
</div></ContentTemplate>
</artisteer:Block>
</asp:Content>
gridview1 和 label1 都没法在 default.aspx.cs中自动显示出来。控件实在找不到。求高手指点。 --------------------编程问答-------------------- CodeFile="details.aspx.cs" Inherits="details" 是否正确 --------------------编程问答-------------------- 那个我知道,文件名不重要。
--------------------编程问答-------------------- 通过Content 的ID的FindControl去找 --------------------编程问答--------------------
高手,代码咋弄啊,asp.net不太熟。命名空间弄得乱。请赐教啊。 --------------------编程问答-------------------- 还有,只能找到<artisteer:Block id="HighlightsBlock2" Caption="" runat="server" >
的id,但是findcontrol不到label --------------------编程问答-------------------- 求高手啊
--------------------编程问答-------------------- 你可以采用递归找到任何控件。
没有你的全部代码,没法给写成具体的代码的。
自己要学会调试。
你可以启用Trace功能,查看控件树
补充:.NET技术 , ASP.NET