无法通过静态方法在 ListBox 中显示值

Unable to display values in ListBox from static method

在 Static WebMethod 上,我无法获得 ListBoxcontrol,因此我将该控件存储在 Page_Load 事件的会话中,如下所示:

HttpContext.Current.Session["LB_AvailFields"] = lbavailablefields;

调用 WebMethod 后,我从数据库中获取值并尝试填充 ListBox,但 ListBox 未显示任何值。 以下是硬编码测试代码,它在 Page_Load 上运行良好,但在 WebMethod 上运行良好,请指出我哪里出错了?

List<MyListItem> LB = new List<MyListItem>();
MyListItem lbitem;
for(int i= 0;i<5;i++)        
{
    lbitem = new MyListItem();
    lbitem.PMKey = "Key" + i;
    lbitem.PMSystemName = "SystemName: " + i;
    LB.Add(lbitem);
}
ListBox lbox = (ListBox)HttpContext.Current.Session["LB_AvailFields"];
lbox.DataSource = LB;
lbox.DataTextField = "PMSystemName";
lbox.DataValueField = "PMKey";
lbox.DataBind();

WebMethod 的概念是为您提供类似 web 服务的快速体验。该网页在服务器上不存在,就像 Page_Load 工作时一样。预期用途是从客户端脚本调用 Web 方法,return 数据到客户端并在那里使用 (javascript)

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public MyReturnResultObject[] GetListBoxData()
{
    List<MyReturnResultObject> result = new List<MyReturnResultObject>();
    loop to fill your return result
    {
        var oneResult = new MyReturnResultObject();
        ...
        result.Add(oneResult);
    }
    return result.toArray();
}

然后在客户端,您使用 javascript 调用该方法,只需使用 returned json 填充您的列表框(使用 javascript) .在javascript中有很多方法可以做到这一点,展示了最基本的;如果 jQuery 可用,您可以使用它。

   var myList = ...; // obtain a reference to your list box
   var anOption; 
   loop through json
       anOption = document.createElement("Option"); 
       anOption.text = ...; //from json
       anOption.value = ...; //from json
       myList.add(anOption);