下拉列表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;
}
}
根据您的代码,似乎您正在使用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调用,但我没有任何经验,