PageMethods в ASP.NET не работает, если у вас реализована маршрутизация ASP.NET - PullRequest
4 голосов
/ 16 ноября 2011

У меня есть веб-метод:

[System.Web.Services.WebMethod]
public static string getCharacterstics(int product_id, int lang_id)
{
    // code goes here...
}

Я хочу получить к нему доступ, используя PageMethods, например: (При условии, что у меня есть Включить PageMethods в ScriptManager):

<script type="text/javascript">
    $(document).ready(
        function () {
            $('#characterstics').html("loading");
            // '<%= product_id_property %>' , '<%= this.LanguageID %>'
            PageMethods.getCharacterstics(0 ,0 , OnSave);
        }
    );

    function OnSave(result) {
    }
</script>

Iполучить сообщение об ошибке "сообщение глагола http для доступа к пути .. не разрешено"

Я гуглил его и тоже ищу в SO, но не нашел решения относительно него на основе маршрутизации ASP.NET.

Я считаю, что из-за маршрутизации asp.net сервисные методы недоступны.

Кроме того, я думаю, что даже не могу использовать JSON из-за маршрутизации asp.net.

Приветствуется любая помощь.

Обновлено:

Если я запустил страницу с таким URL:

http://localhost:2606/searchdetail.aspx

Веб-метод успешно выполнен.

Теперь

У меня есть такая маршрутизация:

       routes.MapPageRoute("searchdetail", "searchdetail/{ID}", "~/searchdetail.aspx");
        routes.MapPageRoute("searchdetail", "searchdetail", "~/searchdetail.aspx");

set_path () будет работать только для случая 2, т.е. без идентификатора, но не работает с делом 1

если я попытаюсь

   http://localhost:2606/searchdetail

Он отлично работает

, но если я попытаюсь использовать:

http://localhost:2606/searchdetail/123

Это гОшибка ives в том, что объект ожидался.

Итак, set_path () - это опция, которую я должен написать.

Ответы [ 2 ]

11 голосов
/ 16 ноября 2011

В настоящее время WebMethods не работают прозрачно со структурой маршрутизации.Есть работа вокруг.Вы должны получить доступ к PageMethods напрямую, выполнив в своем javascript следующее:

PageMethods.set_path('/the/path/to/your/page.aspx');
PageMethods.YourMethod(params, onSuccess, onFailure);

Надеюсь, это поможет.

2 голосов
/ 29 января 2015

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

Создайте гиперссылку серверного элемента управления, где URL-адрес навигации ссылается на себя, затем, когда элемент управления рендерится, возьмите ссылку и используйте ее для set_path

Это решает проблему, когда set_path не ссылается на правильное местоположение, если вы позвонили

<asp:HyperLink ID="hlPage" runat="server" NavigateUrl="~/user.aspx" ClientIDMode="Static"></asp:HyperLink>

<script>
$(document).ready(function () {PageMethods.set_path($('#hlPage').attr('href'));})
</script>
...