Остановить процесс страницы - PullRequest
0 голосов
/ 22 мая 2009

Я работал над проблемой уже пару часов. Я хочу создавать динамические JavaScript, которые я загружаю на страницу, когда мне это нужно. Это проект, построенный по технологии Ajax. Сначала я попытался сделать это с помощью PageMethods, но PageMethods может быть статичным только из-за viewstate и других вещей. Проблема заключалась в том, что я не смог запрограммировать объект объекта страницы или любой другой элемент управления, потому что метод статический.

Моя следующая идея, которая работает, заключается в том, что у меня есть панель обновлений, и внутри этой панели у меня есть скрытое поле, где я храню свои скрипты. Я запускаю скрытое поле, чтобы сделать постбэк через javascript. В Page_Init я проверяю, является ли это постбэком asynchrounos и является ли оно скрытым полем, которое вызвало его. Если это так, я регистрирую свой новый скрипт.

Теперь к проблеме. Когда это происходит, я не хочу идти дальше в жизненном цикле страницы. Я все. Я не хочу, чтобы Page_Load запускался, Pre_Render и т. Д. Как мне этого добиться? Response.End () останавливает процесс страницы, но, очевидно, мои сценарии не зарегистрированы.

Хорошо, я могу проверить в каждом методе, является ли это постбэком asynchrounos и является ли это скрытым полем, вызвавшим его, но я хочу встроить его в базовый класс страниц, от которого будут наследоваться все страницы. Я хочу, чтобы оно было как можно более общим.

Есть идеи? Буду признателен, если кто-нибудь поможет мне в этом. Благодарю. / John

Ответы [ 2 ]

1 голос
/ 22 мая 2009

Методы, которые вы не хотите запускать, являются обработчиками событий. Пока вы не закончите ответ, эти события будут срабатывать. Это фундаментальная часть работы aspx-страницы, она запускает события.

Если в обработчиках событий есть код, который вы не хотите запускать, вы можете:

- установите флаг в page_init, а затем проверьте его в обработчиках событий попробуйте отцепить события вашей страницы (это плохая идея и может нарушить дальнейшие постбэки)

Я подозреваю, что вы действительно хотите сделать - создать собственный обработчик, который возвращает ваш javascript и вызывать его из загружаемого javascript.

Итак, у вас есть обработчик, который называется что-то вроде MyJavascriptGenerator.ashx, и у вас есть скрытый javascript, вызывающий эту страницу вместо отправки обратно на ту же страницу aspx.

Без подробностей о предполагаемом поведении страниц, это все, что я могу придумать.

0 голосов
/ 22 мая 2009

ASPXpage:

    function Generate() {
        __doPostBack('hdJS', 'function SayHello(){alert(\'Hello to you\')}');
    }

    function Execute() {
        SayHello();
    }

</script>



Codebehind:

с использованием системы; using System.Collections.Generic; использование System.Linq; использование System.Web; использование System.Web.UI; использование System.Web.UI.WebControls; использование System.Web.UI.HtmlControls;

пространство имен WebApp { открытый частичный класс _Default: System.Web.UI.Page { защищенный void Page_Init (отправитель объекта, EventArgs e) { if (ScriptManager1.IsInAsyncPostBack) { if (Request ["__ EVENTTARGET"] == "hdJS") ScriptManager.RegisterClientScriptBlock (hdJS, hdJS.GetType (), "key", Request ["__ EVENTARGUMENT"], true); } }

    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

}

Это пример кода. Как бы вы перевели это в httphandler. Как и то, о чем я могу подумать, мне нужно каким-то образом отправить обратно одну и ту же страницу, чтобы в нее был введен javascript, верно? Страница уже загружена, и я не хочу ее перезагружать. Это главная цель. Хорошо, я могу перезагрузить его с частичным рендерингом страницы, как с панелью обновления, но это означает, что весь жизненный цикл страницы выполняется снова, и обновляются только части внутри панели, но все же все элементы управления инициализируются и весь код обрабатывается снова. Я хочу избежать этого. Как я могу добиться этого с HttpHandler? / John

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...