我新建了一个用户控件xxx.ascx,在后台定义了一些html控件并add到页面上,这样的话页面上这些html控件的name值会自动加上用户控件的ID做前缀,如何避免?? 我想要纯的指定name。
HtmlInputRadioButton ra = new HtmlInputRadioButton();
ra.Name = "rdobtain";
ra.ID = "rdobtain";
ra.ClientIDMode = System.Web.UI.ClientIDMode.Static;//这样只能指定ID为静态,如何让name也有这样的效果????
另外的一个也是类似的问题:在用户控件后台定义的<a>标签的href属性为何会自动加个前缀?
HtmlAnchor a = new HtmlAnchor();
a.HRef = "modify.aspx?tomodifyid=" + drc[0].ToString();//此用户控件被使用后该链接地址会自动改变始终指向该用户控件所在文件夹,为何??如何避免?我只想href的值是我写的那个
a.InnerText = "修改";
4 个解决方案
#1
求助求助求助求助求助求助
#2
1.
如果继承了INamingContainer interface,设置子控件ID,它的UniqueID 和 ClientID会自动加上父控件的
this.UniqueID和分隔符作为前缀,服务器段用$,客户端转换为_,这点我想你已经遇到了。
public class INamingContainerControl:WebControl
{
protected override void CreateChildControls()
{
TextBox tbx=new TextBox();
tbx.ID="txt";
this.Controls.Add(tbx);
Button btn=new Button();
btn.ID="btn";
this.Controls.Add(btn);
}
}
这样执行的话,页面中只会有你自己定义的ID。 不过为了防止名称的冲突,还是建议继承 INamingContainer
public virtual string ClinetID
{
get
{
string uniqueID=this.UniqueID;
return uniqueID.Replace(this.IdSeparator,'_');
}
}
public override string IdSeparator
{
get
{
return "$";
}
}
问:为啥要去掉呢?
2.
RenderBeginTag(HTMLTextWrite writer)
RenderContents(HTMLTextWrite output)
RenderEndTag(HTMLTextWrite writer)
以上代码没经过测试,只是作为说明。
如果继承了INamingContainer interface,设置子控件ID,它的UniqueID 和 ClientID会自动加上父控件的
this.UniqueID和分隔符作为前缀,服务器段用$,客户端转换为_,这点我想你已经遇到了。
public class INamingContainerControl:WebControl
{
protected override void CreateChildControls()
{
TextBox tbx=new TextBox();
tbx.ID="txt";
this.Controls.Add(tbx);
Button btn=new Button();
btn.ID="btn";
this.Controls.Add(btn);
}
}
这样执行的话,页面中只会有你自己定义的ID。 不过为了防止名称的冲突,还是建议继承 INamingContainer
public virtual string ClinetID
{
get
{
string uniqueID=this.UniqueID;
return uniqueID.Replace(this.IdSeparator,'_');
}
}
public override string IdSeparator
{
get
{
return "$";
}
}
问:为啥要去掉呢?
2.
RenderBeginTag(HTMLTextWrite writer)
RenderContents(HTMLTextWrite output)
RenderEndTag(HTMLTextWrite writer)
以上代码没经过测试,只是作为说明。
#3
ID前缀是.net自动加的吧,防止ID一样,要不2个控件里面都有ID一样的控件,不添加前缀那就一样了,这个应该没办法控制
链接可以是使用绝对地址
链接可以是使用绝对地址
HtmlAnchor a = new HtmlAnchor();
a.HRef="/xxxxxx/modify.aspx?tomodifyid=1";//从根目录开始。。
a.InnerText = "修改";
#4
name应该也差不多,如果使用Request对象获取提交的值,name一样2个控件的内容的值就会合并到一起,用“,”分隔开
#1
求助求助求助求助求助求助
#2
1.
如果继承了INamingContainer interface,设置子控件ID,它的UniqueID 和 ClientID会自动加上父控件的
this.UniqueID和分隔符作为前缀,服务器段用$,客户端转换为_,这点我想你已经遇到了。
public class INamingContainerControl:WebControl
{
protected override void CreateChildControls()
{
TextBox tbx=new TextBox();
tbx.ID="txt";
this.Controls.Add(tbx);
Button btn=new Button();
btn.ID="btn";
this.Controls.Add(btn);
}
}
这样执行的话,页面中只会有你自己定义的ID。 不过为了防止名称的冲突,还是建议继承 INamingContainer
public virtual string ClinetID
{
get
{
string uniqueID=this.UniqueID;
return uniqueID.Replace(this.IdSeparator,'_');
}
}
public override string IdSeparator
{
get
{
return "$";
}
}
问:为啥要去掉呢?
2.
RenderBeginTag(HTMLTextWrite writer)
RenderContents(HTMLTextWrite output)
RenderEndTag(HTMLTextWrite writer)
以上代码没经过测试,只是作为说明。
如果继承了INamingContainer interface,设置子控件ID,它的UniqueID 和 ClientID会自动加上父控件的
this.UniqueID和分隔符作为前缀,服务器段用$,客户端转换为_,这点我想你已经遇到了。
public class INamingContainerControl:WebControl
{
protected override void CreateChildControls()
{
TextBox tbx=new TextBox();
tbx.ID="txt";
this.Controls.Add(tbx);
Button btn=new Button();
btn.ID="btn";
this.Controls.Add(btn);
}
}
这样执行的话,页面中只会有你自己定义的ID。 不过为了防止名称的冲突,还是建议继承 INamingContainer
public virtual string ClinetID
{
get
{
string uniqueID=this.UniqueID;
return uniqueID.Replace(this.IdSeparator,'_');
}
}
public override string IdSeparator
{
get
{
return "$";
}
}
问:为啥要去掉呢?
2.
RenderBeginTag(HTMLTextWrite writer)
RenderContents(HTMLTextWrite output)
RenderEndTag(HTMLTextWrite writer)
以上代码没经过测试,只是作为说明。
#3
ID前缀是.net自动加的吧,防止ID一样,要不2个控件里面都有ID一样的控件,不添加前缀那就一样了,这个应该没办法控制
链接可以是使用绝对地址
链接可以是使用绝对地址
HtmlAnchor a = new HtmlAnchor();
a.HRef="/xxxxxx/modify.aspx?tomodifyid=1";//从根目录开始。。
a.InnerText = "修改";
#4
name应该也差不多,如果使用Request对象获取提交的值,name一样2个控件的内容的值就会合并到一起,用“,”分隔开