URL не разрешается в UserControl - PullRequest
       16

URL не разрешается в UserControl

8 голосов
/ 19 октября 2010

Если я передам производный класс testA a PlaceHolder, который содержит Hyperlink, с 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

Ответы [ 2 ]

5 голосов
/ 01 ноября 2010

Когда вы наследуете от 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);
    }
}
1 голос
/ 19 октября 2010

A UserControl обычно ассоциируется с файлом ascx, который определяет его разметку. Такие элементы управления должны быть созданы с использованием TemplateControl.LoadControl () перед их добавлением на страницу, чтобы выполнить перехват событий.

Я подозреваю, что перехват событий не происходит, так как вы не звоните LoadControl(), поэтому Hyperlink NavigateUrl никогда не получит шанса быть правильно решенным.

...