Значение, переданное ajax из Javascript в C #, получено, но не сохранено

#javascript #c# #jquery #asp.net #ajax

#javascript #c# #jquery #asp.net #ajax

Вопрос:

Я передаю значение в свою часть C # с помощью ajax и получаю ответ обратно. Но я не могу сохранить значение или использовать его в своем коде на C #. Дополнительная информация ниже:

Вызов Ajax: (gallery.aspx)

     $.ajax({
        url: Url, //assigned previously
        data: 'call=ajaxamp;method=GetListamp;typeIds='   typeIds.replace(",",""),
            type: 'POST',
            dataType: 'json',
            success: function (resp) {
                console.log("From AJAX: "   resp) // this works and shows the result

            },
             error: function (xhr, status) {
                console.log("Sorry, there was a problem!");
            }
    });
  

Исходный код (CodeFile):(gallery.aspx.cs)

Обновление: Полный фрагмент кода C #

 public partial class gallery : System.Web.UI.Page
{
        public List<string> images = new List<string>();    
        public List<string> imagesList = new List<string>();
        public List<string> filteredImagesList = new List<string>();
        public List<string> testList = new List<string>();
        protected string imagesName;
        protected string filterType;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request["call"].ParseString() == "ajax")
            {
                Response.Write(Request["typeIds"].ParseString().TrimEnd(','), true, ResponseType.Json);
                filterType = Request["typeIds"].ParseString().TrimEnd(',');
            }
            else
            {
                filterType = "Not Assigned!";
            }
        }
}
  

Вывод на странице: Не присвоено!
Значение <h1><%=filterType%></h1> в файле aspx возвращает оператор else из файла aspx.cs

Но я получаю ответ обратно в моем javascript, пока console.log("From AJAX: " resp) отображается результат.

НО я не могу использовать значение filtertype в моем файле кода c #.

Я не могу понять, почему Response.Write(Request["type"].ParseString().TrimEnd(','), true, ResponseType.Json); возвращает запрос [«type»] в js-часть, но не сохраняет его для моего файла кода. Должно ли это быть что-то вроде ответа.Чтение или ответ.Сохранить или что-то в этомроде?

Кто-нибудь знает, что здесь происходит?

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

1. Пожалуйста, уточните, что вы подразумеваете под файлом кода C #. Вы говорите о коде за файлом или о строке C # на странице Razor? Просто укажите use весь метод, из которого взят ваш фрагмент C #.

2. Да, это исходный код, но я всегда использую CodeFile=»myfile.aspx.cs» для @ tag вверху

3. Есть ли ваш код на C # в методе, и если это так, не могли бы вы, пожалуйста, обновить свой вопрос кодом, который окружает ваш фрагмент C #.

4. @Chris Я обновил свой вопрос. Дайте мне знать, должен ли я поделиться дополнительной информацией

5. Что это значит Output on the page: Not Assigned! . Когда вы видите этот результат?

Ответ №1:

Вы можете сохранить ответ ajax в скрытом поле, а затем получить доступ к значению этого скрытого поля в коде на стороне сервера.

 <asp:HiddenField ID="HiddenField1" runat="server" />  

$.ajax({
        url: Url, //assigned previously
        data: 'call=ajaxamp;method=GetListamp;type='   typeIds.replace(",",""),
            type: 'POST',
            dataType: 'json',
            success: function (resp) {
                console.log("From AJAX: "   resp) // this works and shows the result
                 $('#<%=HiddenField1.CliendId%>').val(resp);

            },
             error: function (xhr, status) {
                console.log("Sorry, there was a problem!");
            }
    });
  

Затем вы можете получить доступ к коду на стороне сервера следующим образом:

 HiddenField1.Value
  

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

1. Проект вылетает при добавлении asp: HiddenField ошибка не указана

2. Можете ли вы уточнить, что это означает под сбоями проекта

3. При обновлении я получаю ошибку 301. Проект, в котором у меня есть ошибка 301, попадает в перенаправление и не регистрирует данные об ошибке

4. скрытое поле не должно иметь ничего общего с перенаправлением 301

5. Я знаю, но, как ни странно, я могу использовать asp: label или другие свойства asp: . Но когда я делаю тот же трюк с asp: label, это не работает

Ответ №2:

ОК. Оно никогда не будет присвоено так, как вы это сделали. Просто потому, что когда страница загружается и все элементы управления отображаются, вызовы ajax не учитывают жизненные циклы страницы. Из-за этого загрузка страницы filterType не назначается.

Хотя у вас есть пара вариантов

  1. Используйте Ajax с панелью обновления и классом PageRequestManager
  2. Измените значение с помощью jQuery или Vanilla JS, используя <%=filterType.ClientID%>

Если вам нужно только внешнее представление, вы можете использовать любой вариант. Если вам это нужно для дальнейшей серверной части, я боюсь, что вариант 1 подходит только вам.

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

1. Но как получилось, что ответ работает правильно. Ответ. Запись работает нормально и записывает желаемый ответ обратно в js

2. Поскольку оно ответило на запрос Ajax, все элементы управления были установлены