C# URL';在UserControl(ASP.NET)中时未解析
如果我传递派生类C# URL';在UserControl(ASP.NET)中时未解析,c#,asp.net,user-controls,resolve,C#,Asp.net,User Controls,Resolve,如果我传递派生类testA一个占位符,该占位符包含一个超链接,url以 一个波浪线,它可以正确地解析它。 但是,当我通过testB (除了继承自 System.Web.UI.UserControl)相同的占位符 从字面上呈现它(不显示) 转换/解析“~”) 有什么想法吗 public class testA : System.Web.UI.Control { public System.Web.UI.WebControls.PlaceHolder plc { get; set; }
testA
一个占位符
,该占位符包含一个超链接
,url以
一个波浪线,它可以正确地解析它。
但是,当我通过testB
(除了继承自
System.Web.UI.UserControl
)相同的占位符
从字面上呈现它(不显示)
转换/解析“~”)
有什么想法吗
public class testA : System.Web.UI.Control
{
public System.Web.UI.WebControls.PlaceHolder plc { get; set; }
protected override void OnLoad(EventArgs e)
{
if (plc != null)
this.Controls.Add(plc);
base.OnLoad(e);
}
}
public class testB : System.Web.UI.UserControl
{
public System.Web.UI.WebControls.PlaceHolder plc { get; set; }
protected override void OnLoad(EventArgs e)
{
if (plc != null)
this.Controls.Add(plc);
base.OnLoad(e);
}
}
这是ASP.NETA通常与定义其标记的ascx
文件相关联。在将这些控件添加到页面之前,应该使用实例化这些控件,以便执行事件跟踪
我怀疑没有发生事件跟踪,因为您没有调用LoadControl()
,因此,超链接
的NavigateUrl
永远没有机会得到正确的解析。当您从System.Web.UI.UserControl
继承,并且不将控件与ascx
文件关联时,将不会设置控件TemplateSourceVirtualDirectory
,这是ResolveClientUrl
方法所必需的-如果其为null或为空,url将按原样返回
要解决您的问题,只需设置AppRelativeTemplateSourceDirectory
:
public class testB : System.Web.UI.UserControl
{
public System.Web.UI.WebControls.PlaceHolder plc { get; set; }
protected override void OnLoad(EventArgs e)
{
if (plc != null)
{
this.AppRelativeTemplateSourceDirectory =
plc.AppRelativeTemplateSourceDirectory;
this.Controls.Add(plc);
}
base.OnLoad(e);
}
}
是的,如果它没有runat=server,那么它就不能在System.Web.UI.control中工作。谢谢,现在我看到了区别(doh对我来说,认为它们是一样的)是将testA
和testB
添加到页面的代码完全相同?是的,我只是在更改testX继承自并重新编译的类。因此,当它继承自testB
时,您从未在testX
上调用LoadControl()
?我很好奇testB
是否可以工作,即使使用LoadControl(Type,object[])