在web方法中转换void函数

时间:2017-03-28 18:06:47

标签: javascript c# html asp.net webmethod

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

1 个答案:

答案 0 :(得分:0)

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

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

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

检查出来:

How to fill a DropDown using Jquery Ajax Call?