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);
}
}
}
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);
}
}
}