我有一个文本框,它是自动完成文本框(即它是来自数据库的绑定数据,并在按键上显示结果)
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())"
块内做一些更改,但不知道该怎么做。
有人可以解释一下如何做到这一点。
答案 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);
}
});