2011-12-14 8 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を使用していることが表示されます。このライブラリを使用して以来、長い時間が経ちましたが、コントロール値のポストバックをサポートしていないか、別の設定や属性を呼び出して動作させる必要があることを思い出しています。

いずれにせよ、コールを変更して、メソッド呼び出しで選択した値を含める方がよいと思います。

あなたが何か行うことができるはず:経年とAjax.netの見かけの古さ(のCodePlexの最後の更新が2006年にあった)、私は希望に

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

更新

をこの機能を提供するには、ページ内の静的Webメソッドを使用することをお勧めします。

1)

using System.Web.Services; 

2 System.Web.Services名前空間をインポートし、あなたのGetDataメソッドは、パラメータとしてユーザーIDを持つ静的メソッドに変換):ここで

は、あなたが作るべき変更があります

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

     return Surname; 
    } 

3)あなたのページへのScriptManagerを追加するか、それが既に存在する場合は、次のようにそれを変更します:とWebMethod属性で飾ら

<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関数に渡そうとしましたが、何らかの理由で動作しません。 私が行う必要があるのは、値が完全リフレッシュなしでaspxに戻っている限り、SQLルックアップを動的に行うことだけです。 –

+0

まず、GetDataメソッドを更新してオブジェクトパラメータとして値を受け入れることを前提としていますか?もっと最近の方法については、私は推奨で答えを更新しました。 –

+0

努力の仲間のおかげで、ありがとう、私はできるだけ早くそれを試し、私はどうやって行くのか教えてあげます。 –

関連する問題