下拉列表SelectedValue不工作

本文关键字:工作 SelectedValue 下拉列表 | 更新日期: 2023-09-27 18:17:58

我在asp:DropDownList中获得所选值时遇到了麻烦。我正在使用AJAX,并希望更新默认值。Aspx页面动态。这是工作的,但是,从DropDownList中检索的值没有被正确地传递给ASP函数。

ASP函数返回了一些东西,只是不是字符串。我这样做对吗?

default . aspx:

<script type="text/javascript">
  // Calls an ASP function, gets user surname
  function GetData(){
      var response = UserForm.GetData();
      alert (response); // returns [object object]
      document.getElementById("surnameLabel").innerHTM = response;
  }
</script>
<asp:SqlDataSource 
  id="Users" 
  runat="server" 
  connectionstring="<%$ ConnectionStrings:ConnectionString %>" 
  selectcommand="select username, userid from users"  
>
</asp:SqlDataSource>
<asp:DropDownList 
  id="UserList"
  name="UserList"
  runat="server"
  DataSourceID="Users"
  DataTextField="username" 
  DataValueField="userid" 
>
</asp:DropDownList>
<input type="button" onclick="GetData();" value="Get Surname" />
<asp:Label name="surnameLabel" id="surnameLabel" Text="No user selected"></asp:Label>

Default.aspx.cs:

public partial class UserForm : System.Web.UI.Page 
{
  protected void Page_Load(object sender, EventArgs e)
  {
    Ajax.Utility.RegisterTypeForAjax(typeof(AwardsForm));
    if (!this.IsPostBack) { }
  }   
  // This function is called from the javascript function and looks up the users surname
  [Ajax.AjaxMethod(HttpSessionStateRequirement.ReadWrite)]
  public string GetData()
  {
      string userid = UserList.SelectedValue.ToString(); // this value keeps on equalling null
      // Do some SQL using this ID to look up user surname
      return Surname;
  }
}

下拉列表SelectedValue不工作

根据您的代码,似乎您正在使用Ajax.Net。我使用这个库已经有很长一段时间了,但我记得它要么不支持回发控件值,要么必须在某处调用另一个设置或属性才能使其工作。

无论如何,我认为您最好更改调用,以便在方法调用中包含所选值。

你应该可以这样做:

var ddList = document.getElementById("UserList");
var response = UserForm.GetData(ddList.options[ddList.selectedIndex].value);

由于Ajax.net的年龄和明显的过时(codeplex的最后一次更新是在2006年),我建议在您的页面中使用静态WebMethod来提供此功能。

这里是你应该做的改变:

1)导入System.Web.Services命名空间
using System.Web.Services;

2)将GetData方法转换为一个静态方法,使用userid作为参数,并使用WebMethod属性进行装饰:

  [WebMethod]
  public static string GetData(string sUserId)
  {
      // Do some SQL using this ID to look up user surname
      return Surname;
  }

3)添加一个scriptmanager到你的页面,或者如果它已经存在,将其更改为如下所示:

    <asp:ScriptManager ID="ScriptManager1" 
        runat="server" EnablePageMethods="true">
    </asp:ScriptManager>
4)改变你的javascript,用新的参数来调用这个新方法:
var ddList = document.getElementById("UserList");
var response = PageMethods.GetData(ddList.options[ddList.selectedIndex].value);

在MSDN文档中有一个很好的例子。

请注意,一些例子,包括上面的链接,有一个变化的脚本管理器声明和javascript调用,但我没有任何经验,