在 web 方法中转换 void 函数

Transforming void function in webmethod

我有一个函数可以在加载页面时填充列表框 (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);
            }
        }

但现在我需要 nuke 并从 JavaScript 重新填充该列表,但我不确定如何操作。 我试过了,但是它在 DiveSiteList(网页中的列表框)上说 "an object reference is required for the nonstatic field method or property":

[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;
        }

我尝试了一些不同的东西,但我有点迷茫,有人能帮忙吗?

编辑:MasterDiveSiteList

 public List<DiveSite> MasterDiveSiteList;
 DiveDBClass = new DBAccessClass();
                Initialize();
 private void Initialize()
        {
            MasterDiveSiteList = DiveDBClass.GetAllDiveSites();
        }

当您第一次填充列表时,该实例存在,因为它在页面的上下文中执行。

然而,当您通过 JavaScript 调用该方法时,您使用的是静态实例,它没有您之前在加载页面时拥有的上下文。

执行此操作的正确方法是让 JavaScript 方法接收项目列表。然后您可以在客户端填充它们。

看看这个:

How to fill a DropDown using Jquery Ajax Call?