Вопрос

Если я передаю полученный класс testA а. 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.

Это было полезно?

Решение

Когда вы наследуете от 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);
    }
}

Другие советы

А. Usercontrol. обычно связан с ascx Файл, который определяет его разметку. Такие элементы управления должны быть созданы с использованием TemplateControl.loadcontrol () Прежде чем они добавлены на страницу, чтобы выполнить догонять событие.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top