Custom Control does not allow access to Attributes

S

Sanjay Pais

I built a custom control for all the basic web.ui.controls like textbox,
label, checkbox etc etc. I added my custom attribute called ApplySecurity to
the html in the page.

However, when I cycle through the controls on the page using this code, I
cant seem to be able to access the Attribute collection. However, if I were
to add the tag to a regular TextBox, the Attribute is available.

My recursive function looks like this:
*******************************************************
private SortedList PageFieldDetector(Control ctlPage, ref SortedList
r_slPageControlList)

{

string strPageID = ctlPage.ClientID;

string strObjectID = "";

string strObjectType = "";

string strTempObjectType = "";

string strApplySecurity = "";

int intLastPeriodIndexPosition = 0;

foreach (Control ctrl in ctlPage.Controls)

{

strObjectID = ctrl.ClientID.ToString();

//check if securable

try

{

strApplySecurity =
((WebControl)(ctrl)).Attributes["applysecurity"].ToString();

}

catch

{

strApplySecurity = "False";

}

if (strApplySecurity == "True")

{

strTempObjectType = ctrl.GetType().ToString();

intLastPeriodIndexPosition = strTempObjectType.LastIndexOf(".") + 1;

strObjectType = strTempObjectType.Substring(intLastPeriodIndexPosition,
strTempObjectType.Length - intLastPeriodIndexPosition);

r_slPageControlList.Add(strObjectID, strObjectType);

}

else

{

if (ctrl.Controls.Count > 0)

{

PageFieldDetector(ctrl, ref r_slPageControlList);

}

}

}

return r_slPageControlList;

}

*******************************************************
A regular html control like this has the attribute collection:
<asp:Label ID="lblHeader" applysecurity="False" runat="server" Text="Page
Header No security is to be applied to this object"></asp:Label>



However, My custom textbox does not diaplay any attributes at all

<aepc:aeptextbox id="AEPTextBox1" runat="server"
applysecurity="True"></aepc:aeptextbox>

This is my code for the custom textbox:

using System;

using System.Collections.Generic;

using System.Text;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;

using System.Drawing;

using System.Diagnostics;

using System.Design;

[assembly: TagPrefix("AEPortal", "AEPC")]

namespace AEPortal

{

[ToolboxData("<{0}:AEPTextBox runat=server
applysecurity=False></{0}:AEPTextBox>")]

[ToolboxBitmap(typeof(TextBox))]

[DesignerAttribute("System.Web.UI.WebControls.TextBox")]

public class AEPTextBox : System.Web.UI.WebControls.TextBox

{

[Bindable(true),

Description("Accruent Enterprise Portal Custom TextBox"),

Category("Misc"),

DefaultValue("False")]

private bool blnApplySecurity = false;

public bool ApplySecurity

{

get

{

return blnApplySecurity;

}

set

{

blnApplySecurity = value;

}

}

protected override void Render(HtmlTextWriter w)

{

w.AddAttribute("applysecurity", blnApplySecurity.ToString());

base.Render(w);

}

}

}
 
B

Brock Allen

Arbitrary attributes (ones where there is no property) are implemented by
the custom control implementing the IAttributeAccessor interface.




I built a custom control for all the basic web.ui.controls like
textbox, label, checkbox etc etc. I added my custom attribute called
ApplySecurity to the html in the page.

However, when I cycle through the controls on the page using this
code, I cant seem to be able to access the Attribute collection.
However, if I were to add the tag to a regular TextBox, the Attribute
is available.

My recursive function looks like this:
*******************************************************
private SortedList PageFieldDetector(Control ctlPage, ref SortedList
r_slPageControlList)
{

string strPageID = ctlPage.ClientID;

string strObjectID = "";

string strObjectType = "";

string strTempObjectType = "";

string strApplySecurity = "";

int intLastPeriodIndexPosition = 0;

foreach (Control ctrl in ctlPage.Controls)

{

strObjectID = ctrl.ClientID.ToString();

//check if securable

try

{

strApplySecurity =
((WebControl)(ctrl)).Attributes["applysecurity"].ToString();

}

catch

{

strApplySecurity = "False";

}

if (strApplySecurity == "True")

{

strTempObjectType = ctrl.GetType().ToString();

intLastPeriodIndexPosition = strTempObjectType.LastIndexOf(".") + 1;

strObjectType =
strTempObjectType.Substring(intLastPeriodIndexPosition,
strTempObjectType.Length - intLastPeriodIndexPosition);

r_slPageControlList.Add(strObjectID, strObjectType);

}

else

{

if (ctrl.Controls.Count > 0)

{

PageFieldDetector(ctrl, ref r_slPageControlList);

}

}

}

return r_slPageControlList;

}

*******************************************************
A regular html control like this has the attribute collection:
<asp:Label ID="lblHeader" applysecurity="False" runat="server"
Text="Page
Header No security is to be applied to this object"></asp:Label>
However, My custom textbox does not diaplay any attributes at all

<aepc:aeptextbox id="AEPTextBox1" runat="server"
applysecurity="True"></aepc:aeptextbox>

This is my code for the custom textbox:

using System;

using System.Collections.Generic;

using System.Text;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ComponentModel;

using System.Drawing;

using System.Diagnostics;

using System.Design;

[assembly: TagPrefix("AEPortal", "AEPC")]

namespace AEPortal

{

[ToolboxData("<{0}:AEPTextBox runat=server
applysecurity=False></{0}:AEPTextBox>")]

[ToolboxBitmap(typeof(TextBox))]

[DesignerAttribute("System.Web.UI.WebControls.TextBox")]

public class AEPTextBox : System.Web.UI.WebControls.TextBox

{

[Bindable(true),

Description("Accruent Enterprise Portal Custom TextBox"),

Category("Misc"),

DefaultValue("False")]

private bool blnApplySecurity = false;

public bool ApplySecurity

{

get

{

return blnApplySecurity;

}

set

{

blnApplySecurity = value;

}

}

protected override void Render(HtmlTextWriter w)

{

w.AddAttribute("applysecurity", blnApplySecurity.ToString());

base.Render(w);

}

}

}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top