#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",
Надеюсь, это вам поможет. Удачи!