Перенаправить страницу со значением с помощью ajax Jquery и asp.net

#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, т.е

  1. Часть URL в вашем Ajax, вызывающем этот :

    url: 'DetailView.aspx/Test'

Я предполагаю, что вы используете FriendlyURL .

Итак, в вашем RouteConfig.cs , пожалуйста, прокомментируйте эту строку

 settings.AutoRedirectMode = RedirectMode.Permanent;
  
  1. Вы можете отправить параметры в свой Ajax следующим образом

    var params = "{'pid:' " result "}";

Замените эту переменную в вашем AJax вызове следующим образом

    data: params
  

Ответ №3:

Убедитесь, что вы включили вызов ajax в веб-сервисе, для этого добавьте эту строку перед определением класса webservice

 [System.Web.Script.Services.ScriptService()]