KaranGupta
asked on
Problem in getting the control on runtime
Hi
I have created a web custom control.The class is inherited from TextBox class.
I have made a property called MTBID as ID of the control.
I can put that control on aspx page and everything is working fine, but when I try to access the control in code behind file.
It is not working well.
I have created a web custom control.The class is inherited from TextBox class.
I have made a property called MTBID as ID of the control.
I can put that control on aspx page and everything is working fine, but when I try to access the control in code behind file.
It is not working well.
Are you sure you made your property with Public rather than Private or Protected?
ASKER
yes
public string MTBID
{
get;
set;
}
public string MTBID
{
get;
set;
}
Can you please paste the code how are you creating your custom control within ASPX Source.
Have you referenced it properly at the top of the page?
Have you referenced it properly at the top of the page?
ASKER
Here we go
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<%@ Register TagPrefix="FTB" Namespace="MultiPurposeTextBox" Assembly="MultiPurposeTextBox" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<FTB:MultiPurposeTextControl ID="karan" MTBErrorMessageControlType="VALIDATIONSUMMARY" MTBText="karan"
runat="server"></FTB:MultiPurposeTextControl>
</div>
</form>
</body>
</html>
You may be annoyed by these questions but...
Have you referenced the correct version of the assembly containing the control in this project?
And make sure that the DLL of the custom object is either registered within GAC or placed within bin folder of the current project.
After referencing, try closing the page from design and code behind mode. Re-open ASPX file in Design mode. Try double click anywhere on the form to move to code behind and see if you can now refernce your control or not. If you are still unable to do that, try creating a reference by yourself in the main .vb file of .designer.vb file and see if it gets to work.
Have you referenced the correct version of the assembly containing the control in this project?
And make sure that the DLL of the custom object is either registered within GAC or placed within bin folder of the current project.
After referencing, try closing the page from design and code behind mode. Re-open ASPX file in Design mode. Try double click anywhere on the form to move to code behind and see if you can now refernce your control or not. If you are still unable to do that, try creating a reference by yourself in the main .vb file of .designer.vb file and see if it gets to work.
Are you setting MTBID at runtime and it gets cleared on postback?
if so you'll need to keep the value in viewstate for example. See below how ASP.NET TextBox Text property is implemented.
you could also use the control like this without needing the viewstate implementation:
<FTB:MultiPurposeTextContr ol ID="karan" MTBID="somevalue" MTBErrorMessageControlType ="VALIDATI ONSUMMARY" MTBText="karan"
runat="server"></FTB:Multi PurposeTex tControl>
if so you'll need to keep the value in viewstate for example. See below how ASP.NET TextBox Text property is implemented.
you could also use the control like this without needing the viewstate implementation:
<FTB:MultiPurposeTextContr
runat="server"></FTB:Multi
public virtual string Text
{
get
{
string str = (string) this.ViewState["Text"];
if (str != null)
{
return str;
}
return string.Empty;
}
set
{
this.ViewState["Text"] = value;
}
}
ASKER
Hi tetorvik
I think we need to specify some attribute over the property
so that we can use it as ID
I think we need to specify some attribute over the property
so that we can use it as ID
ASKER
Hi moghazali
Please don't hesitate in asking the question. I'll never be annoyed
Yes I have added the reference of the dll by "Add Reference"
Please don't hesitate in asking the question. I'll never be annoyed
Yes I have added the reference of the dll by "Add Reference"
ASKER
Hi
I more thing I want to share is
there is another attribute called ID
<FTB:MultiPurposeTextContr ol MTBID="karan122" MTBErrorMessageControlType ="LABEL" MTBText="123"
runat="server"></FTB:Multi PurposeTex tControl>
when I define ID then I can get the value in code behind but not in case of MTBID
I more thing I want to share is
there is another attribute called ID
<FTB:MultiPurposeTextContr
runat="server"></FTB:Multi
when I define ID then I can get the value in code behind but not in case of MTBID
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
I did not dig into details but this page may also give idea on the similar but necessarily the same issue:
http://msdn.microsoft.com/en-us/library/hw8sf6fb.aspx
http://msdn.microsoft.com/en-us/library/hw8sf6fb.aspx
I think ID is really required. At least I haven't seen/found any attribute that would make a custom property to replace original ID property.
It also seems that if you declare a custom control without ID like:<FTB:MultiPurposeText Control MTBID="karan122" MTBErrorMessageControlType ="LABEL" MTBText="123" runat="server"></FTB:Multi PurposeTex tControl>
the runtime generates a "random" ID for it. In that case it is really difficult to use the control in code-behind without knowing the ID. To use the control in code behind you would need to create a helper method to browser through the page controls and returns the correct control based on control type and MTBID attribute.
I think this can be done, but I don't think you should.
It also seems that if you declare a custom control without ID like:<FTB:MultiPurposeText
the runtime generates a "random" ID for it. In that case it is really difficult to use the control in code-behind without knowing the ID. To use the control in code behind you would need to create a helper method to browser through the page controls and returns the correct control based on control type and MTBID attribute.
I think this can be done, but I don't think you should.