非静态字段方法或属性

时间:2018-09-06 09:00:52

标签: c# asp.net

我正在尝试在Sql查询中使用文本框ID,但上面显示了错误。 当我提供客户名称而不是客户ID时,效果很好。

这是我的代码。

  [System.Web.Script.Services.ScriptMethod()]
[System.Web.Services.WebMethod]

public static List<string> SearchAddress(string prefixText, int count)
{

   using (SqlConnection conn = new SqlConnection())
    {
        conn.ConnectionString = dbConnection.fnConnectionString();
        using (SqlCommand cmd = new SqlCommand())
        {             
            cmd.Connection = conn;

            conn.Open();

            cmd.CommandText = @"select city,Addresscode from BName_Addresscode
                           where Customer='"+txtCustomerName.text+'";

            List<string> customers1 = new List<string>();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                while (sdr.Read())
                {

                    String Code = sdr["City"].ToString();
                    String Name = sdr["Addresscode"].ToString();
                    Name = Code + "(" + Name + ")";
                    customers1.Add(Name);

                }
            }
            conn.Close();
            return customers1;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

那行不通,这就是原因。

您的页面方法是静态

public static List<string> SearchAddress(string prefixText, int count)

这意味着您不能引用实例成员,txtCustomerName.Text引用您的类的实例成员(txtCustomerName)。

要解决此问题,请将文本框的实际值移动到此方法的自变量,有趣的事实是您可能已经在该位置了,prefixText自变量似乎就是其中一个,不是吗?

public static List<string> SearchAddress(string **prefixText**, int count)

然后,在JavaScript中,只需按照docs中所述将值传递给方法:

function GetSearchAddress() 
{
    var customer = $get("txtCustomerName").value;
    var count    = ...;
    PageMethods.SearchAddress(customer, count, onCompleted);
}