#javascript #c# #jquery #asp.net #ajax
#javascript #c# #jquery #asp.net #ajax
Вопрос:
У меня действительно есть две страницы. Один — Default.aspx, а другой — DetailView.aspx. Что я хочу сделать, так это перенаправить страницу из Default.aspx в DetailView.aspx, используя вызов ajax, и я также хочу передать одно значение. Я что-то сделал, но это не вызывающая функция, которая определена в классе.
Я вызываю эту функцию из веб-файла Default.aspx
$.ajax({
type: 'POST',
url: 'DetailView.aspx/Test',
contentType: "application/json; charset=utf-8",
dataType: "json",
data: '{pid:' result '}',
success: function (data) {
}
});
это файл класса DetailView.aspx
[WebMethod(EnableSession = true)]
public static string Test(string pid)
{
return " ";
}
Я отлаживал эту функцию, но она вообще не вызывает эту функцию при вызове ajax.
Комментарии:
1. у вас также должен быть блок ошибок в вашем вызове ajax, чтобы увидеть, в чем заключается ошибка. Это должно дать вам представление о том, чего не хватает.
Ответ №1:
Вы хотите преобразовать значение JavaScript в JSON с помощью JSON.stringify() перед отправкой данных.
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DemoWebForm.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<button type="button" onclick="ajaxPostData();">Post Data to Detail View</button>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
function ajaxPostData() {
var data = { pid: "One" };
$.ajax({
type: "POST",
url: '<%= ResolveUrl("~/DetailView.aspx/Test") %>',
data: JSON.stringify(data),
contentType: "application/json",
success: function (msg) {
console.log(msg.d);
}
});
}
</script>
</form>
</body>
</html>
DetailView.aspx.cs
using System.Web.Services;
namespace DemoWebForm
{
public partial class DetailView : System.Web.UI.Page
{
[WebMethod(EnableSession = true)]
public static string Test(string pid)
{
return "Hello " pid;
}
}
}
Комментарии:
1. данные: «{ «rID»: «» результат «» }»
2. данные должны быть в таком формате data: «{ «rID»: «»» результат «»» }»
3. Вам не нужно заключать ее в кавычки.
data: {id: result };
должно сработать (при условии, что результатом является имя переменной) или сначала опубликовать образец строкиdata: {id: "test" };
для тестирования. К вашему СВЕДЕНИЮ : Если вы переименуете свойство из pid в id , вам также придется переименовать имя параметра в id в методе тестирования.
Ответ №2:
Из вашего объявления метода ajax, т.е
-
Часть URL в вашем Ajax, вызывающем этот :
url: 'DetailView.aspx/Test'
Я предполагаю, что вы используете FriendlyURL
.
Итак, в вашем RouteConfig.cs
, пожалуйста, прокомментируйте эту строку
settings.AutoRedirectMode = RedirectMode.Permanent;
-
Вы можете отправить параметры в свой Ajax следующим образом
var params = "{'pid:' " result "}";
Замените эту переменную в вашем AJax
вызове следующим образом
data: params
Ответ №3:
Убедитесь, что вы включили вызов ajax в веб-сервисе, для этого добавьте эту строку перед определением класса webservice
[System.Web.Script.Services.ScriptService()]