получение данных с помощью json в шаблоне umbraco

#jquery #umbraco #webmethod

#jquery #umbraco #веб-метод

Вопрос:

У меня есть следующий код для передачи параметра веб-методу и получения результата в jquery ajax:

 <script type="text/javascript">
    $(document).ready(function () {
        $('#<%=btnSignup.ClientID %>').click(function () {


            var dataString = JSON.stringify({
                firstName: $("#SignupFirstName").val(),
                lastName: $("#SignupLastName").val(),
                email: $("#SignupEmail").val(),
                password: $("#SignupPassword").val()
            });

            $.ajax({
                type: "POST",
                url: "Signup.aspx/Signup",
                data: dataString,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                async: true,
                cache: false,
                beforeSend: function () {
                    // some code
                },
                success: function (result) {
                    $('#loading').hide();

                    if (result.hasOwnProperty("d")) { result = result.d; }//and some more code
                }
            });
            return false;
        });
    });
</script>
  

и веб-метод:

 [WebMethod]
public static SignupOutput Signup(string firstName, string lastName, string email, string password)
{
    // execute some code and return an object for the json
}
  

Метод не выполняется, я использую хорошие URL-адреса. Пожалуйста, помогите, что не так с кодом?
Спасибо.

Комментарии:

1. Где объявлен веб-метод — автономный код .cs, page (.aspx.cs) или usercontrol (.ascx.cs)?

Ответ №1:

Я бы сначала начал с того, что запустил alert внутри вашей функции click, просто чтобы убедиться, что она действительно попадает. Предполагая, что это так…

Ознакомьтесь с документацией для /Base . Убедитесь, что не пропустите ссылки справа от этой страницы, они немного неясны.

В принципе, я думаю, вам нужно будет сделать это…

Переместите свой веб-метод в отдельный класс и удалите [WebMethod] атрибут. В прошлом я также сталкивался с возвращением объектов, и то, к чему я перешел, — это просто создание строки в формате json и ее возврат. Итак, в итоге вы получите что-то вроде этого:

 
public class UmbracoWebMethods
{
    public static SignupOutput Signup(string firstName, string lastName, string email, string password) // you may need to change this to public static string
    {
        // execute some code and return an object for the json
    }
}
  

Добавьте конфигурацию в /presentation/config/restExtensions.config

 
<?xml version="1.0" encoding="utf-8"?>
<RestExtensions>  
  <ext assembly="YourAssembly" type="YourAssembly.UmbracoWebMethods" alias="UmbWebMethods">
    <permission method="Signup" allowAll="true" returnXml="false" />
  </ext>
</RestExtensions>
  

Очевидно, вам нужно будет немного изменить это, чтобы оно соответствовало вашему точному имени сборки / пространствам имен.

Измените вызов ajax.

 
$.get("/Base/UmbWebMethods/Signup/"   $("#SignupFirstName").val()  "/"   $("#SignupLastName").val()  "/"   $("#SignupEmail").val()   "/"   $("#SignupPassword").val()   ".aspx",
  

Надеюсь, это вам поможет. Удачи!