如何使用ajax和pagememethods更新页面变量

本文关键字:变量 更新 pagememethods 何使用 ajax | 更新日期: 2023-09-27 18:19:12

有没有办法从页面方法中更新实例变量而不使它们成为静态的?

我的页面有一个ViewModel对象,其中包含很多我想要更新ajax和pagememethods的数据。我在asp.net前端页面中使用ViewModel来打印变量值。

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

* * ASP.net webforms页面(后端)* *

   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> 

如何使用ajax和pagememethods更新页面变量

使用Session状态是可能的,因为它可以在多个页面上携带,但是您必须确保当用户在任何给定时间切换页面时,会话数据被清除,否则它将在下一个页面加载时使用(除非这是您想要的)。

你也可以让你的方法建立一个htmlstring粘贴到你的页面:

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

然后在你的ajax success回调你可以做:

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

它可以工作,但它确实需要您手工构建一个html字符串,如果您必须处理多个一维数组,这将变得更加困难。

我建议将JSON与Ajax结合使用。这是传递您想要的任何内容的最简单方法,并且仍然能够处理数据,而不仅仅是将其粘贴为html。

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

我建议你通读这篇教程,它让你对JSON是如何构建和处理的有了一个很好的了解。

正如您所注意到的,PageMethods是静态的。如果没有可操作的实例,静态方法就无法操作实例成员。

此外,您必须理解,在请求完成后,您的页面实例不存在。没有可操作的实例成员

如果您需要将状态信息从一个请求传递到另一个请求,则不能使用Page实例变量(Page实例仅在单个请求期间存在)—并且您也不应该使用静态信息。

一个正确的方法是让Ajax等代码更新Session状态。如果你不能或不想使用Session状态,还有其他的可能性