PageMethods не работает с веб-приложением VS2013

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

Обратите внимание: EnablePageMethod=true внутри ScriptManager, метод является общедоступным, статическим и украшен [WebMethods]

Один и тот же код отлично работает с VS2010 и с пустым проектом в VS2013, но при использовании с Новый проект -> веб-сайт -> веб-формы вывод прикреплен здесь для справки. Вывод ошибки

Вот мой код.

Код позади:

[System.Web.Services.WebMethod]
        public static string GetCurrentTime(string name)
        {
            return "Hello " + name + Environment.NewLine + "The Current Time is: "
                + DateTime.Now.ToString();
        }

JavaScript:

<script type="text/javascript">
        function ShowCurrentTime() {
            PageMethods.GetCurrentTime(document.getElementById("<%=txtUserName.ClientID%>").value, OnSuccess);
           }
           function OnSuccess(response, userContext, methodName) {
               alert(response);
           }
    </script>

HTML:

<div>
        Your Name : 
            <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
        <input id="btnGetTime" type="button" value="Show Current Time" onclick="ShowCurrentTime()" />
    </div>

person BilalAhmed    schedule 12.11.2016    source источник
comment
Можете ли вы вставить код страницы, которую вы используете? Я имею в виду полную разметку вашей страницы.   -  person Sunil    schedule 13.11.2016


Ответы (3)


Попробуйте добавить как [System.Web.Services.WebMethod], так и [System.Web.Script.Services.ScriptMethod] в метод GetCurrentTime на стороне сервера.

Также убедитесь, что в вашем менеджере скриптов есть EnablePageMethods="True". В вашем вопросе указано, что вы установили EnablePageMethod=true, что написано неправильно (должно быть во множественном числе).

person Jesse Johnson    schedule 12.11.2016
comment
Попробуйте открыть инструменты разработчика браузера, чтобы увидеть, какие ошибки регистрируются в консоли. Добавление зарегистрированных сообщений об ошибках к вашему вопросу действительно поможет. - person Jesse Johnson; 14.11.2016

Вам нужно сбой обработчика события клика, чтобы предотвратить отправку постбэка/страницы.

Просто верните false из вашей функции javascript:

function ShowCurrentTime() {
    PageMethods.GetCurrentTime(document.getElementById("<%=txtUserName.ClientID%>").value, OnSuccess);
    return false; // added
}
person Shaharyar    schedule 13.11.2016

Вы должны убедиться, что кнопка не отправляется обратно при вызове PageMethod со стороны клиента. С вашей текущей разметкой он будет отправлять обратно и вызывать неожиданные эффекты.

Вы должны использовать следующую разметку для кнопки, чтобы она никогда не возвращалась. Тогда вызов pagemethod должен работать. В разметке ниже событие нажатия кнопки возвращает ложное значение, поэтому страница никогда не отправляется, т. е. не отправляется обратно.

Кроме того, было бы лучше, если бы вы разместили разметку своей страницы полностью, так как могут возникнуть проблемы с разметкой.

<input id="btnGetTime" type="button" value="Show Current Time"
                    onclick="ShowCurrentTime();return false;" />
person Sunil    schedule 13.11.2016