Я пытаюсь реализовать что-то похожее на this или это.
Я создал пользовательский элемент управления, веб-службу и веб-метод для возврата визуализированного html элемента управления, выполняя вызовы ajax через jQuery.
Все работает нормально, но если я помещаю что-то в пользовательский элемент управления, который использует относительный путь (в моем случае HyperLink с NavigateUrl = "~ / mypage.aspx"), разрешение относительного пути на моем развивающемся сервере не выполняется.
Я ожидаю: http://localhost:999/MyApp/mypage.aspx
Но я получаю: http://localhost:999/mypage.aspx
Отсутствует "Мое приложение" ...
Я думаю, проблема в создании страницы, используемой для загрузки элемента управления:
Page page = new Page();
Control control = page.LoadControl(userControlVirtualPath);
page.Controls.Add(control);
...
Но я не могу понять, почему ....
РЕДАКТИРОВАТЬ Для ясности
Мой пользовательский элемент управления расположен в ~/ascx/mycontrol.ascx
и содержит действительно простую структуру: на данный момент это просто гиперссылка с NavigateUrl, например "~/mypage.aspx"
. И «mypage.aspx» действительно находится в корне.
Затем я создал веб-сервис, чтобы вернуть в ajax частично обработанный элемент управления:
[ScriptService]
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class wsAsynch : System.Web.Services.WebService
{
[WebMethod(EnableSession = true)]
public string GetControl(int parma1, int param2)
{
/* ...do some stuff with params... */
Page pageHolder = new Page();
UserControl viewControl = (UserControl)pageHolder.LoadControl("~/ascx/mycontrol.ascx");
Type viewControlType = viewControl.GetType();
/* ...set control properties with reflection... */
pageHolder.Controls.Add(viewControl);
StringWriter output = new StringWriter();
HttpContext.Current.Server.Execute(pageHolder, output, false);
return output.ToString();
}
}
HTML-код отображается правильно, но относительный путь в NavigateUrl гиперссылки неправильно разрешен, потому что, когда я выполняю проект с сервера разработки VS2008, корнем моего приложения является
и это нормально, но NavigateUrl разрешается как
http://localhost:999/mypage.aspx
проигрывает / MyApp /. Конечно, если я помещаю свой ascx на реальную страницу вместо экземпляра pageHolder, используемого в ws, все работает нормально.
Еще одна странность заключается в том, что если я установил hl.NavigateUrl = Page.ResolveUrl("~/mypage.aspx")
, я получаю правильный URL-адрес страницы: http://localhost:999/MyApp/mypage.aspx
И сейчас я сделаю это, но я пойму, ПОЧЕМУ это не работает нормально. Любая идея?
hl.NavigateUrl = Page.ResolveUrl("~/mypage.aspx")
? До этого вы запускалиhl.NavigateUrl = "~/mypage.aspx"
в этом же месте кода? - person awe   schedule 15.09.2010