DropDownList SelectedValue不起作用

时间:2011-12-14 22:32:58

标签: c# javascript asp.net ajax

我无法在asp:DropDownList中获取所选值。我正在使用AJAX并想要动态更新Default.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;
  }
}

1 个答案:

答案 0 :(得分:1)

根据您的代码,您似乎正在使用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);

this MSDN documentation中有一个很好的例子。

请注意,一些示例(包括上面链接中的示例)在脚本管理器声明和javascript调用方面有变化,但我没有任何相关经验。