1

aspx ページにテキスト ボックスがあります。そのため、Jsonの関数でテキストボックスのテキストを送信する必要があります。そのために、サーバー側にメソッドがあります。

   [WebMethod]
    public static OfficeDetails[] BindSearchDatatable(string officename)
    {

        DataTable dt = new DataTable();
        List<OfficeDetails> details = new List<OfficeDetails>();

        using (SqlConnection con = new SqlConnection(@"Data Source=GTL--7\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"))
        {
            using (SqlCommand cmd = new SqlCommand("select  OfficeName,City,Country from Office where OfficeName like '%" + officename + "%'", con))
            {
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
                foreach (DataRow dtrow in dt.Rows)
                {
                    OfficeDetails Office = new OfficeDetails();
                    Office.OfficeName = dtrow["OfficeName"].ToString();
                    Office.City = dtrow["City"].ToString();
                    Office.Country = dtrow["Country"].ToString();
                    details.Add(Office);
                }
            }
        }
        return details.ToArray();
    }

そして私が持っている.aspxページで

 $('#btnSearch').click
                            (
                                function () {
                                    var searchtext = $("#txtSearch").val();

                                    alert(searchtext);
                                    $.ajax(
                                                {
                                                    type: "POST",
                                                    url: "Gridview.aspx/BindSearchDatatable",
                                                    data: "{officename : New}",
                                                    contentType: "application/json; charset=utf-8",
                                                    dataType: "json",
                                                    async: true,
                                                    cache: false,
                                                    success: function (data) {
                                                        for (var i = 0; i < data.d.length; i++) {
                                                            $("#gvDetails").append("<tr><td>" + data.d[i].OfficeName + "</td><td>" + data.d[i].City + "</td><td>" + data.d[i].Country + "</td></tr>");
                                                        }
                                                    },
                                                    error: function (x, e) {
                                                        alert("The call to the server side failed. " + x.responseText);
                                                    }
                                                }
                                            );
                                    return false;
                                }
                            );

今私の質問は、データでパラメーターを送信することですが、エラーが発生しています 関数は正常に実行されています.パラメーターなしでテストしたので、正常に実行されています. .

4

2 に答える 2

4

無効な JSON を送信しています。交換:

data: "{officename : New}"

と:

data: "{officename : 'New'}"

またはJSON.stringify、値を適切にエンコードする方法を使用することをお勧めします。

data: JSON.stringify({ officename : 'New' })

また、サーバー側のスクリプトを修正し、パラメーター化されたクエリを使用してください。コードは SQL インジェクション攻撃に対して脆弱であり、このコードを公開すると、いつかデータベースが見つからないことに気付くかもしれません。ああ、本当に DataTables は必要ありません。

[WebMethod]
public static OfficeDetails[] BindSearchDatatable(string officename)
{
    using (var con = new SqlConnection(@"Data Source=GTL--7\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"))
    using (var cmd = con.CreateCommand())
    {
        con.Open();
        cmd.CommandText = "SELECT OfficeName, City, Country FROM Office WHERE OfficeName LIKE @officename";
        cmd.Parameters.AddWithValue("@officename", "%" + officename + "%");
        using (var reader = cmd.ExecuteReader())
        {
            var details = new List<OfficeDetails>();
            while (reader.Read())
            {
                var office = new OfficeDetails();
                office.OfficeName = reader.GetString(reader.GetOrdinal("OfficeName"));
                office.City = reader.GetString(reader.GetOrdinal("City"));
                office.Country = reader.GetString(reader.GetOrdinal("Country"));
                details.Add(office);
            }
            return details.ToArray();
        }
    }
}
于 2012-05-30T08:34:05.750 に答える
0

置換:データ: "{officename:New}"

と:

データ:{officename:'New'}、

于 2012-05-30T08:36:36.093 に答える