URL не решается, когда в USERCONTROL (ASP.NET)
-
09-10-2019 - |
Вопрос
Если я передаю полученный класс 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
никогда не получает шанс быть должным образом решен.