2011-12-14 2 views
1

У меня возникли проблемы с получением выбранного значения в asp: DropDownList. Я использую AJAX и хочу динамически обновлять страницу Default.aspx. Это работает, однако, ценность, извлекаемая из DropDownList, не передается правильно функции ASP.DropDownList SelectedValue не работает

Функция 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

на основе кода, кажется, что вы используете Ajax.Net. Прошло много времени с тех пор, как я использовал эту библиотеку, но я помню, что либо она не поддерживала отправку контрольных значений или что вам приходилось ссылаться на другую настройку или атрибут где-то, чтобы заставить ее работать.

Независимо от того, что вам было бы лучше сменить вызов, чтобы включить выбранное значение в вызов метода.

Вы должны быть в состоянии сделать что-то вроде:

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

Update

Из-за возраста и кажущейся черствости Ajax.net (последнее обновление в CodePlex было в 2006 году), я бы рекомендуем использовать статический WebMethod на своей странице для обеспечения этой функции.

Вот изменения, которые вы должны сделать:

1) Импорт System.Web.Services имен

using System.Web.Services; 

2) Преобразуйте ваш метод GetData на статический метод с идентификатором пользователя в качестве параметра и украшен атрибутом 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-вызовах, но у меня нет опыта с ними.

+0

Правильно, вы знаете, есть ли более новый метод, который люди используют для такого рода вещей? Я попытался передать переменную Javascript через функцию ASP, но по какой-то причине она не работает. Все, что мне нужно сделать, это искать SQL динамически, пока значение возвращается к aspx без полного обновления. –

+0

Во-первых, я предполагаю, что вы обновили метод GetData, чтобы принять значение в качестве параметра объекта? Что касается более поздних методов, я обновил ответ с рекомендацией. –

+0

Спасибо за загрузку помощника, я проверю его, как только смогу, и дам вам знать, как я пойду. –