Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Script services и ScriptResource.axd


Автор: Dedal 31.7.2009, 20:19
День добрый. Есть такая поблема.
Решил использовать на странице вызов веб-сервиса JavaScript'ом, чтобы избежать лишних постбэков и перезагрузки страницы, потому что на ней слишком много данных, которые к тому же часто обновляются, и использование UpdatePanel не вариант.
Суть в следующем. По клику на элемент интерфейса срабатывает javascript, который вызывает мой же веб-сервис. Веб сервис в ответ высылает кусок разметки, которую надо вставить на страницу.
Метод веб-сервиса, который принимает вызов:
Код

public string GetItem(int position)
        {
            //...пропущено

            return ViewManager.RenderView("/Sublayouts/SiteName/SelectionItem.ascx", SearchResults[position]);
        }


Тут мы берем юзер контрол и задаем ему данные, из которых он инициализирует свои контролы.
Код

public class ViewManager
    {
        public static string RenderView(string path, object data)
        {
            Page pageHolder = new Page();
            UserControl viewControl = (UserControl)pageHolder.LoadControl(path);

            if (data != null)
            {
                if (viewControl is IViewItem)
                    ((ICarouselItem)viewControl).Wine = (Wine)data;
                else
                    throw new Exception("View file: " + path + " does not implement IViewItem interface.");
            }

            pageHolder.Controls.Add(viewControl);

            StringWriter output = new StringWriter();
            try
            {
                HttpContext.Current.Server.Execute(pageHolder, output, false);
            }
            catch(Exception ex)
            {
                //...
            }

            return output.ToString();
        }

    }


Все работает: вызывается, возвращается, обновляется на странице. Но есть одно "но". Если посмотреть на страницу в Firebug ( закладка Script) при первой загрузке, то там есть 4 штуки ScriptResource.axd и один WebResource.axd. При каждом вызове вышеописаного механизма появляется дополнительных два ScriptResource.axd. Поскольку все это отрабатывает на странице многократно, то через некоторое время их появляются десятки и клиентская часть начинает ощутимо медленнее рабоать.
Один из появляющихся SriptResource.axd содержит следующее (разметка, которую вернул веб-сервис):
({d: "\r\n \r\n <a href=\"#null\">\r\n <ins>\r\n <div id=\"ctl00_divVisual\" class=\"plAlternative\" 
..................... 
</a>\r\n \r\n"});
 /* !eval(new String(value);)) */

Второй вот такой:
Sys.Net.XMLHttpExecutor;
/* !eval(new String(value);)) */

Вопрос: можно ли избавиться от такого количества ScriptResource.axd?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)