【问题标题】:URL's not being resolved when in UserControl (ASP.NET)在 UserControl (ASP.NET) 中 URL 没有被解析
【发布时间】:2010-10-19 14:42:12
【问题描述】:

如果我将派生类testA 传递给包含HyperlinkPlaceHolder,其url 以开头 一个波浪号,它可以正确解决它。 但是,当我通过testB (除了继承自 System.Web.UI.UserControl) 一样 PlaceHolder 它 从字面上呈现它(不 转换/解析'~')

有什么想法吗?

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

【问题讨论】:

  • 是的,如果它没有 runat=server 那么它将无法在 System.Web.UI.Control 中工作
  • 谢谢,现在我看到了区别(我觉得它们是一样的)
  • 在页面中添加testAtestB的代码是否完全相同?
  • 是的,我只是更改了 testX 继承自并重新编译的类。
  • 所以当 testX 继承自 testB 时,您永远不会调用 LoadControl()

标签: c# asp.net user-controls resolve


【解决方案1】:

当您从System.Web.UI.UserControl 继承并且不将您的控件与ascx 文件关联时,您的控件TemplateSourceVirtualDirectory 将不会被设置,这是ResolveClientUrl 方法所必需的 - 如果它为空或为空 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);
    }
}

【讨论】:

    【解决方案2】:

    UserControl 通常与定义其标记的ascx 文件相关联。此类控件应在添加到页面之前使用TemplateControl.LoadControl() 进行实例化,以便执行事件追赶。

    我怀疑由于您没有致电LoadControl(),因此不会发生事件追赶,因此HyperlinkNavigateUrl 永远没有机会得到正确解决。

    【讨论】:

    • 我很好奇 testB 即使在使用 LoadControl(Type, object[]) 实例化时也能工作,但它不能。这并不奇怪,因为正如您所指出的,UserControls 意味着具有关联的 .ascx 并且可以在标记中声明或使用 LoadControl 加载。
    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多