我有一个要根据用户输入填写的自动填充信息,但是javascript保留了旧值。
这是自动补全的javascript代码
$(function () {
var lstContractIDs = '<%= jsContract %>';
var availableIDs = JSON.parse(lstContractIDs);
$("#txtContractSearch").autocomplete({
source: availableIDs
});
$("#disable").click(function () {
$("#txtContractSearch").autocomplete({
disabled: true
});
});
$("#enable").click(function () {
$("#txtContractSearch").autocomplete({
disabled: false
});
});
});
这是asp.net中的代码
public string jsContract = string.Empty;
private static List<string> contractNumbersSelectedFromDB = new List<string>();
public void PopulateSearch()
{
JavaScriptSerializer serializer = new
JavaScriptSerializer();
jsContract = serializer.Serialize(contractNumbersSelectedFromDB);
PopulateSearchboxAutocomplete();
}
这里叫PopulateASearchBox
protected void PopulateSearchboxAutocomplete()
{
#region set months
List<string> quarters = new List<string>();
if (drMonth.SelectedValue == "Enero - Marzo")
{
quarters.Add("01");
quarters.Add("02");
quarters.Add("03");
}
else if (drMonth.SelectedValue == "Abril - Junio")
{
quarters.Add("04");
quarters.Add("05");
quarters.Add("06");
}
else if (drMonth.SelectedValue == "Julio - Septiembre")
{
quarters.Add("07");
quarters.Add("08");
quarters.Add("09");
}
else if (drMonth.SelectedValue == "Octubre - Diciembre")
{
quarters.Add("10");
quarters.Add("11");
quarters.Add("12");
}
else // if (drMonth.SelectedValue == "últimos tres meses")
{
if (DateTime.Now.AddMonths(-2).Month < 10)
{
quarters.Add("0" + DateTime.Now.AddMonths(-2).Month.ToString());
}
else
{
quarters.Add(DateTime.Now.AddMonths(-1).Month.ToString());
}
if (DateTime.Now.AddMonths(-1).Month < 10)
{
quarters.Add("0" + DateTime.Now.AddMonths(-1).Month.ToString());
}
else
{
quarters.Add(DateTime.Now.AddMonths(0).Month.ToString());
}
if (DateTime.Now.AddMonths(0).Month < 10)
{
quarters.Add("0" + DateTime.Now.AddMonths(0).Month.ToString());
}
else
{
quarters.Add(DateTime.Now.AddMonths(0).Month.ToString());
}
}
#endregion
clientSelectedFromDB.Clear();
PopulateASearchBox(quarters, "erp_clientes", "nombre", clientSelectedFromDB);
contractNumbersSelectedFromDB.Clear();
PopulateASearchBox(quarters, "erp_contratos", "numero_contrato", contractNumbersSelectedFromDB);
estimateSelectedFromDB.Clear();
PopulateASearchBox(quarters, "erp_cotizaciones", "numero_cotizacion", estimateSelectedFromDB);
expeditionSelectedFromDB.Clear();
PopulateASearchBox(quarters, "erp_expediciones", "numero_expedicion", expeditionSelectedFromDB);
invoiceSelectedFromDB.Clear();
PopulateASearchBox(quarters, "erp_documentos_facturacion", "numero_documento", invoiceSelectedFromDB);
}
在此处将contractNumbersSelectedFromDB填充到texboxToAddStrings中的contractNumbersSelectedFromDB ==
public void PopulateASearchBox(List<string> quarters, string database, string numeroSearch, List<string> texboxToAddStrings)
{
string year = drYear.SelectedValue;
for (int i = 0; i < quarters.Count; i++)
{
string selectedContract = year.Substring(year.Length - 2) + quarters[i];
string selectStatement = "";
if (numeroSearch == "numero_contrato")
{
selectStatement = "select contrato_id, " + numeroSearch + " from " + database + " "
+ "where " + numeroSearch + " like '" + selectedContract + "%' order by 2 desc " +
"limit 10000; ";
}
else if (numeroSearch == "numero_cotizacion")
{
selectStatement = "select cct.cotizacion_id, cot.numero_cotizacion from erp_cotizaciones cot "
+ "inner join erp_contratos_cotizacion cct on cct.cotizacion_id = cot.cotizacion_id "
+ " where cot.numero_cotizacion like '" + selectedContract + "%' order by 2 desc"
+ " limit 10000";
}
else if (numeroSearch == "numero_expedicion")
{
selectStatement = "select cex.expedicion_id, exp.numero_expedicion from erp_expediciones exp "
+ " inner join erp_contratos_expedicion cex on cex.expedicion_id = exp.expedicion_id "
+ " where exp.numero_expedicion like '" + selectedContract + "%' order by 2 desc"
+ " limit 10000";
}
else if (numeroSearch == "numero_documento")
{
selectStatement = " SELECT edf.documento_id, edf.numero_documento FROM erp_documentos_facturacion edf "
+ " inner join erp_contratos ctr on ctr.contrato_id=edf.contrato_id "
+ " where edf.numero_documento like '" + selectedContract + "%' order by 2 desc"
+ " limit 10000";
}
else if (numeroSearch == "nombre")
{
selectStatement = " select cl.cliente_id, cl." + numeroSearch + " " +
" from erp_contratos ctr " +
" inner join erp_clientes cl on cl.cliente_id=ctr.cliente_id " +
" where ctr.numero_contrato like '" + selectedContract + "%' " +
" group by ctr.cliente_id limit 10000 ";
}
using (MySqlConnection conn = new MySql.Data.MySqlClient.MySqlConnection(connString))
{
conn.Open();
using (MySqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = selectStatement;
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
string foundNumber = reader.GetString(reader.GetOrdinal(numeroSearch));
texboxToAddStrings.Add(foundNumber);
}
}
conn.Close();
}
}
}
}
以下是我的问题,即使contractNumbersSelectedFromDB包含较小的项列表或没有项,为什么jsContract不更改?