如何使用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>
使用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状态,还有其他的可能性