Asp. Сетевое единственное управление представляет для вызовов Ajax

Я пытаюсь реализовать что-то подобное этому или этому.

Я создал пользовательский элемент управления, веб-сервис и веб-метод для возврата представленного HTML управления, выполнив вызовы ajax с помощью jQuery.

Все хорошо работает, но если я поместил что-то в пользовательский элемент управления, который использует относительный путь (в моем случае HyperLink с NavigateUrl = "~/mypage.aspx") разрешение сбоев относительного пути в моем сервере разработки.

Я ожидаю: http://localhost:999/MyApp/mypage.aspx

Но я добираюсь: http://localhost:999/mypage.aspx

Пропавшие без вести 'MyApp'...

Я думаю, что проблема находится на создании Страницы, используемой для загрузки управления:

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, корень моего приложения

http://localhost:999/MyApp/

и это прекрасно, но NavigateUrl разрешен как

http://localhost:999/mypage.aspx

потеря/MyApp/. Конечно, если я поместил свой ascx в реальную страницу вместо pageHolder экземпляра, используемого в ws, все хорошо работает.

Другая странная вещь - это, если я установил hl.NavigateUrl = Page.ResolveUrl("~/mypage.aspx") Я получаю корректный URL страницы: http://localhost:999/MyApp/mypage.aspx

И к настоящему времени я сделаю это, но я понял бы, ПОЧЕМУ это не работает нормальным способом. Какая-либо идея?

6
задан tanathos 1 July 2010 в 07:28
поделиться

2 ответа

Tildy протолкнула путь в корень приложения, чтобы получить те результаты, которые вы видите. Вы захотите использовать:

NavigateUrl="./whatever.aspx"

РЕДАКТИРОВАТЬ:
Вот ссылка, которая также может оказаться полезной ... http://msdn.microsoft.com/en-us/library/ms178116.aspx

0
ответ дан 17 December 2019 в 07:00
поделиться

Я нахожу, что корень /MyApp/ вызывает всевозможные проблемы. Это не совсем отвечает на ваш вопрос "почему не работает обычный способ", но вы понимаете, что можете избавиться от /MyApp/ и разместить свой сайт на http:/localhost/...?

Просто установите Virtual Path в свойствах сайта на '/'.

Это все прояснит, если, конечно, вы не пытаетесь одновременно разместить несколько приложений на компьютере разработчика.

0
ответ дан 17 December 2019 в 07:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: