将ash从ashx页面传递到aspx标签或隐藏字段

时间:2015-04-24 06:00:58

标签: jquery asp.net ajax autocomplete ashx

我有一个文本框,它是自动完成文本框(即它是来自数据库的绑定数据,并在按键上显示结果)

using (SqlCommand cmd = new SqlCommand())
{
   cmd.CommandText = "select (Patient_First_Name+' '+Patient_Last_Name+' '+Patient_DOB+' '+Patient_Home_Phone+' '+Patient_Account_No)as Patient_Name from PATIENT_DETAIL where " + "Patient_First_Name like @SearchText + '%' and Practice_Id in (select id from PRACTICE_DETAIL where practice_Name_Description = '" + st + "')";
   cmd.Parameters.AddWithValue("@SearchText", prefixText);
   cmd.Connection = conn;
   StringBuilder sb = new StringBuilder(); 
   conn.Open();
   using (SqlDataReader sdr = cmd.ExecuteReader())
   {
       while (sdr.Read())
       {
           sb.Append(sdr["Patient_Name"]).Append(Environment.NewLine);
       }
   }
   conn.Close();
   context.Response.Write(sb.ToString()); 
}

现在在我的表中,我每行也有Id列。每当我在文本框中选择任何结果时,我想将该ID传输到aspx页面中的标签或隐藏字段。

我想我需要在"while(sdr.Read())"块内做一些更改,但不知道该怎么做。

有人可以解释一下如何做到这一点。

1 个答案:

答案 0 :(得分:0)

理想情况下,您应该使用DTO发送数据。步骤

首先创建一个帮助类

public class Patient
{
    public string PatientID { get; set; }
    public string PatientName { get; set; }
}

现在改变你的ashx代码

var patients = new List<Patient>();
.....
.....
using (SqlCommand cmd = new SqlCommand())
{
    cmd.CommandText = "select Patient_ID, Pateient_Name from SomeTable";
    cmd.Connection = conn;
    StringBuilder sb = new StringBuilder();
    conn.Open();
    using (SqlDataReader sdr = cmd.ExecuteReader())
    {
        while (sdr.Read())
        {
            patients.Add(new Patient
            {
                PatientID = sdr["Patient_ID"].ToString(),
                PatientName = sdr["Patient_Name"].ToString()
            }); 
        }
    }
    conn.Close();
    var serializer = new JavaScriptSerializer();
    var outputJson = serializer.Serialize(patients);
    context.Response.Write(outputJson);
}

这将为您提供字符串输出

[{"PatientID":"1","PatientName":"blah"},{"PatientID":"2","PatientName":"blsdsdah"}]

现在你需要在aspx页面上进行deserlialize。 (不确定您是否需要在服务器端或客户端)

服务器端

var serializer = new JavaScriptSerializer();
var patients = serializer.Deserialize<List<Patient>>(op);

客户端

.done(function(){
    var patients = $.parseJSON( data );
    for(var i = 0; i< patients.length; i++){
        console.log(patients[i].PatientID + " : " + patients[i].PatientName);
    }
});