Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# URL';在UserControl(ASP.NET)中时未解析_C#_Asp.net_User Controls_Resolve - Fatal编程技术网

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.NET

A通常与定义其标记的
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[])