Как обновить переменные страницы с помощью ajax и pagemethods? - PullRequest
0 голосов
/ 03 января 2012

Есть ли способ обновить переменные экземпляра из метода страницы, не делая их статичными?

На моей странице есть объект ViewModel, который содержит много данных, которые я хотел бы обновить ajax и методы страницы. Я использую ViewModel на странице интерфейса asp.net для распечатки значений переменных.

Класс ViewModel

  // ViewModel class
   public class ItemViewModel
   {
      public List<Item> Items = new List<Item>();
   }   

** Страница веб-форм ASP.net (серверная часть) **

   public ItemViewModel ViewModel;

    protected void Page_Load(object sender, EventArgs e)
    {
        // init ViewModel;
    }



     [WebMethod]
        public static bool GetItems(string userId)
        {
            // lots of code...
            ItemService i = new ItemService();

            ViewModel = i.GetItems(userId);  // How to update page variables or pass in a new one?

            return true;
        }

Фронтальный

                 <ul>
                        <% foreach (Item i in ViewModel.Items)
                           {  %>        
                                <li>
                                   <%=i.ItemName %>
                                </li>
                        <% } %>
                    </ul> 

Ответы [ 3 ]

1 голос
/ 03 января 2012

Использование состояния сеанса возможно, так как оно переносится по нескольким страницам, но вам нужно убедиться, что когда пользователь переключает страницы в любой момент времени, данные сеанса очищаются, потому что в противном случае они будут использоваться при следующей загрузке страницы.(если это не то, что вы хотите).

Вы также можете заставить свой метод создать строку html, которая будет вставлена ​​на вашу страницу:

public string myFunc()
{
     string html = "<li>foo</li";
     html += "<li>foo2</li>";

     return html;
}

А затем в вашем ajax success обратном вызовеможет сделать:

success: function(data) {
       $("#myUL").html(data);
});

Работает, но требует ручного построения html-строки, что становится экспоненциально сложнее, если вам приходится обрабатывать больше, чем одномерный массив.

Iпредложил бы использовать JSON в сочетании с Ajax.Это самый простой способ передать все, что вы хотите, и при этом иметь возможность обрабатывать данные, а не просто вставлять их в формате html.

http://www.learn -ajax-tutorial.com / Json.cfm

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

1 голос
/ 03 января 2012

Как вы заметили, PageMethods являются статическими.Статический метод не может манипулировать элементами экземпляра, не имея экземпляра для работы.

Кроме того, вы должны понимать, что экземпляр вашей страницы не существует после выполнения запроса.У нет членов экземпляра, которыми можно манипулировать.

0 голосов
/ 03 января 2012

Если вам нужно перенести информацию о состоянии из одного запроса в другой, вы не можете сделать это с помощью переменных экземпляра страницы (экземпляр страницы существует только на время одного запроса) - и вам не следует использовать статику, либо.

Один правильный подход - иметь ваш Ajax и т. д., обновлять состояние сеанса.Существуют и другие возможности, если вы не можете или не хотите использовать состояние сеанса.

...