8

チルダで始まる URL を含む 派生クラスtestAaを渡すと、正しく解決されます。ただし、渡す と(から継承することを除いて 同じ)同じ文字どおりにレンダリングされます(「〜」を変換/解決しません)PlaceHolderHyperlinktestBSystem.Web.UI.UserControlPlaceHolder

何か案は?

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 です

4

2 に答える 2

5

コントロールをファイルから継承し、ファイルにSystem.Web.UI.UserControl関連付けない場合、コントロールは設定されません。これはメソッドで必要です。nullまたは空の場合、URLはそのまま返されます。ascxTemplateSourceVirtualDirectoryResolveClientUrl

問題を解決するには、次のように設定し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);
    }
}
于 2010-11-01T10:21:28.373 に答える
1

通常、 UserControlascxは、そのマークアップを定義するファイルに関連付けられています。このようなコントロールは、イベント キャッチアップを実行するために、ページに追加する前にTemplateControl.LoadControl()を使用してインスタンス化する必要があります。

を呼び出さないため、イベントのキャッチアップが行われないのではないかと思います。LoadControl()そのため、が適切に解決される機会がありません。HyperlinkNavigateUrl

于 2010-10-19T15:22:59.533 に答える