0

私はbind a state ddl by onChange of country ddl使用しようとしていますPageMethods

aspx の JS コード

function GetStates() {
 var e = document.getElementById("<%=ddlCountry.ClientID %>");
 var Countryid = e.options[e.selectedIndex].value;
 PageMethods.GetStates(Countryid,ShowStates);
}

function ShowStates(results)
{
  document.getElementById("li2").innerHTML=results;
}

.CS コード

[System.Web.Services.WebMethod]
public static string GetStates(int Cid)
{
    DataSet dstFillState = Tbl_State.FillDDLState(Cid);
    string strHTML = "<select id='ddlState' name='ddlState'>";
    foreach (DataRow row in dstFillState.Tables[0].Rows) // Loop over the rows.
    {
     strHTML = strHTML + "<option value=" + (string)row["Id"] +">" + (string)row["State"] +"</option>";
    }
    strHTML = strHTML + "</select>";
    return strHTML;
}

エラー メッセージ

The server method 'GetStates' failed with the following error: System.InvalidCastException-- Unable to cast object of type 'System.Int32' to type 'System.String'.

このエラーはブラウザのポップアップとして表示されます。何が欠けていますか?

解決

ここでの問題は、CS 関数と JS 関数の両方で同じ名前の GetStates だったと思いますが、変更して機能しました。

4

1 に答える 1

0

問題はラインにあると思います

foreach (DataRow row in dstFillState.Tables[0].Rows) // Loop over the rows.
{
 strHTML = strHTML + "<option value=" + (string)row["Id"] +">" + (string)row["State"] +"</option>";
}

あなたはこのように使うべきです

foreach (DataRow row in dstFillState.Tables[0].Rows) // Loop over the rows.
{
 strHTML = strHTML + "<option value='" +row["Id"].ToString() +"'>" + row["State"].ToString() +"</option>";
}

あるいは

foreach (DataRow row in dstFillState.Tables[0].Rows) // Loop over the rows.
{
 strHTML = strHTML + "<option value='" + row["Id"] +"'>" + row["State"] +"</option>";
}

これが良い例です
無効なポストバックまたはコールバック引数。ドロップダウン リストに jquery が入力され、ポストバックがある場合

于 2012-12-10T13:06:36.187 に答える