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