我有一个函数在页面加载时填充一个列表框(DiveSiteList),并且工作正常。
<?php
error_reporting(-1);
class A
{
protected $variable;
}
class B extends A
{
public function __construct()
{
$this->variable = 'A';
}
}
?>
但现在我需要nuke并从JavaScript重新填充该列表,我不知道如何。 我试过这个,但它说DiveSiteList(网页上的列表框)中的“非静态字段方法或属性需要对象引用”:
namespace DiveApp_WebApplication
{
public partial class HomePage : System.Web.UI.Page
{
private static DiveManager.DiveManager Manager;
protected void Page_Load(object sender, EventArgs e)
{
Manager = new DiveManager.DiveManager();
BindDiveList();
}
private void BindDiveList()
{
foreach (DiveSite DS in Manager.MasterDiveSiteList)
{
ListItem Item = new ListItem();
Item.Text = DS.DiveSiteName;
Item.Attributes.Add("Name", DS.DiveSiteName);
Item.Attributes.Add("Latitude", DS.Latitude.ToString().Replace(",", "."));
Item.Attributes.Add("Longitude", DS.Longitude.ToString().Replace(",","."));
Item.Attributes.Add("ID", DS.DiveSiteID.ToString());
Item.Attributes.Add("Vis", DS.AvarageVisibility.ToString());
Item.Attributes.Add("Depth", DS.MaximumDepth.ToString());
DiveSiteList.Items.Add(Item);
}
}
我尝试了一些不同的东西,但我有点失落,有人可以帮忙吗?
编辑:MasterDiveSiteList
[System.Web.Services.WebMethod()]
private static int BindDiveListWeb()
{
DiveSiteList.Items.Clear();
foreach (DiveSite DS in Manager.MasterDiveSiteList)
{
ListItem Item = new ListItem();
Item.Text = DS.DiveSiteName;
Item.Attributes.Add("Name", DS.DiveSiteName);
Item.Attributes.Add("Latitude", DS.Latitude.ToString().Replace(",", "."));
Item.Attributes.Add("Longitude", DS.Longitude.ToString().Replace(",", "."));
Item.Attributes.Add("ID", DS.DiveSiteID.ToString());
Item.Attributes.Add("Vis", DS.AvarageVisibility.ToString());
Item.Attributes.Add("Depth", DS.MaximumDepth.ToString());
DiveSiteList.Items.Add(Item);
}
return 1;
}
答案 0 :(得分:0)
第一次填充列表时,实例存在,因为它在页面的上下文中执行。
但是,当您通过JavaScript调用该方法时,您使用的静态实例没有加载页面之前的上下文。
执行此操作的正确方法是让JavaScript方法接收项目列表。然后,您可以在客户端填充它们。
检查出来: