PopupControlExtender DynamicServiceMethod, выдающий ошибку 500

Я огляделся и не нашел решения своей проблемы. У меня есть PopupControlExtender, который продолжает выдавать ошибку "Ошибка вызова веб-службы: 500" вместо отображения всплывающего окна. У меня есть сетка данных со свойством OnItemCreate, которое работает правильно, чтобы назначить атрибуты mouseouver и mouseout для изображения в столбце. Ниже приведен код столбца, который содержит как изображение targetControl, так и сам элемент управления AJAX.

Вот код для управления ajax:

           <asp:TemplateColumn
            HeaderText="Notes"
            SortExpression="note"
            ItemStyle-VerticalAlign="Top"
            HeaderStyle-HorizontalAlign="Center" 
            HeaderStyle-CssClass="colNotes"
            ItemStyle-HorizontalAlign="Center"
            ItemStyle-CssClass="colNotes">
            <ItemTemplate>
                <asp:Label ID="lblNotes" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "note") %>'></asp:Label>
                <%--<asp:HyperLink ID="lnkNotes" Visible='<%# DataBinder.Eval(Container.DataItem, "has_note") %>' Runat="server" Text="..." /> --%>
                <asp:Image ID="lnkNotes" runat="server" Visible='<%# DataBinder.Eval(Container.DataItem, "has_note") %>' ImageUrl="http://www.ezzylearning.com/tutorials/demos/images/magnify.gif" /> 
                <ajax:PopupControlExtender ID="PopupControlExtender1" runat="server"
                    PopupControlID="pnlPopupNotes" 
                    TargetControlID="lnkNotes" 
                    DynamicContextKey='<%# Eval("person_id") +","+Eval("group_id") %>'
                    DynamicControlID="pnlPopupNotes" 
                    DynamicServiceMethod="GetDynamicContent" Position="Bottom"> 
                </ajax:PopupControlExtender> 
            </ItemTemplate>
            </asp:TemplateColumn>

Вот код для DynamicServiceMethod (я намеренно сократил его до простого диапазона, чтобы просто попытаться получить что-то для отображения)...

[System.Web.Services.WebMethodAttribute(),
    System.Web.Script.Services.ScriptMethodAttribute()]
    public static string GetDynamicContent(string contextKey) 
    {


       StringBuilder b = new StringBuilder(); 

       b.Append("<span>Hello!</span>");


       return b.ToString(); 
    }

А вот панель, которую я использую в качестве PopupControlID...

<asp:Panel ID="pnlPopupNotes" runat="server">

Итак, с этой настройкой я успешно получаю поведение при наведении курсора мыши, но там, где я ожидаю увидеть всплывающее окно диапазона, вместо этого я вижу сообщение "Сбой вызова веб-службы: 500". Есть идеи о том, чего мне не хватает?

РЕДАКТИРОВАТЬ:

Я обнаружил, что проблема в том, как веб-сервис вызывается со страницы. Веб-сервис фактически встроен в пользовательский элемент управления на той же странице. Когда я нащупываю курсор мыши и выполняется вызов веб-службы, я вижу URL-адрес, который он создает для доступа к веб-серверу. http://mydomain/default.aspx/GetDynamicContent где должно быть что-то похожее http://mydomain/default.aspx/Usercontrols/parentUserControl.ascx/GetDynamicContent Тем не менее, я не могу понять, как изменить URL, который он вызывает. Я попытался изменить значение свойства DynamicServiceMethod с "GetDynamicContent" на http://mydomain/default.aspx/UserControls/parentUserControl.ascx/GetDynamicContent, но это просто дало путаницу.

Я надеюсь, что это изменение может дать больше понимания тому, кто мог бы помочь мне.

3 ответа

Решение

Я думаю, что я понял это самостоятельно. Используя консоль отладки, я смог увидеть, что при наведении курсора на главную страницу вызывался вызов веб-службы (код которого я не могу манипулировать) и вызывался метод веб-службы. Я фактически создал веб-сервис в пользовательском элементе управления (.ascx), который использовал страница. Это не похоже на работу. В итоге я полностью удалил веб-службу и создал ее собственный файл.asmx, затем добавил атрибут DynamicServicePath, чтобы указать на автономный веб-сервис. Я надеялся, что мне придется прибегнуть к совершенно отдельному веб-сервису, но в любом случае он работает.

Обычно вызов веб-службы с ошибкой 500 будет показан, когда у нас возникнет ошибка в нашем запросе. Я решил эту проблему, проверив ошибку в запросе и исправив ее. После исправления ошибки в нашем запросе появится всплывающий элемент управления..

Если вы объявляете метод (DynamicServiceMethod) на той же странице, метод должен быть "статическим", однако, если у вас есть метод, размещенный в (DynamicServicePath) .asmx, то метод НЕ должен быть объявлен "статическим".
Это не легко отладить и выяснить..

Другие вопросы по тегам