Javascript ASP.NET在更改文本框、触发客户端事件和服务器事件后单击按钮
我有一个用于更改地址的弹出窗口,其中有3个文本框(地址、省和邮政编码)和一个城市的下拉列表。更改邮政编码会通过ajax调用更改省文本框,如果可以的话,我想稍后添加populatecity ddl。问题是,如果我现在更改邮政编码,然后在其外部单击,然后单击“保存”按钮工作正常,我在服务器端函数中的值是正确的,但是如果我更改邮政编码,然后直接单击“保存”按钮,我也可以在界面中看到省文本的正确更改,但在btnSave_中单击它仍然具有旧值。我尝试过不异步ajax调用,但仍然没有 ASPX: 服务器保存单击:Javascript ASP.NET在更改文本框、触发客户端事件和服务器事件后单击按钮,javascript,c#,jquery,asp.net,ajax,Javascript,C#,Jquery,Asp.net,Ajax,我有一个用于更改地址的弹出窗口,其中有3个文本框(地址、省和邮政编码)和一个城市的下拉列表。更改邮政编码会通过ajax调用更改省文本框,如果可以的话,我想稍后添加populatecity ddl。问题是,如果我现在更改邮政编码,然后在其外部单击,然后单击“保存”按钮工作正常,我在服务器端函数中的值是正确的,但是如果我更改邮政编码,然后直接单击“保存”按钮,我也可以在界面中看到省文本的正确更改,但在btnSave_中单击它仍然具有旧值。我尝试过不异步ajax调用,但仍然没有 ASPX: 服务器保存
protected void btnSave_Click(object sender, ImageClickEventArgs e)
{
try
{
string result = null;
// HERE IS THE PROBLEM, BECAUSE I HAVE THE WRONG VALUE
// IN txtProvince.Text IF I CHANGE THE ZIP CODE AND CLICK
// DIRECTLY ON THE SAVE BUTTON
Save(txtProvince.Text, ddlCity.SelectedItem.ToString(), txtZip.Text, txtAddress.Text);
lblError.Text = "";
}
catch (Exception ex)
{
(...)
}
}
看起来jqueryonchange是这样工作的。可能只有在失去焦点时才会开火。可能您可以尝试使用事件。这将更新相应字段中按下的任何键上的字段 更新评论:
使用OnKeyUp会有性能损失,但对于小型应用程序,这很好 在这两种情况下它都会启动,因为在这两种情况下它都会失去焦点,在这两种情况下我都可以在屏幕上看到textbox省值的变化,只有在按钮单击功能中,只有在更改ZIP文本后直接单击按钮时,它仍然具有旧值,这似乎是一个计时问题。我考虑过OnKeyUp替代方案,但在我看来,它似乎会降低性能,增加ajax调用的数量,还是没有?我不认为这是一个时间问题。我曾经有过一次同样的变化。一定要有足够的时间,否则一切都会好起来的。关于性能,它会降低性能,但如果您不是在一个真正的高负载应用程序上,我应该在一开始就很好。在应用程序每秒请求的大小增加后,可以进行一些优化。是的,可能还可以,更好的做法是将zip长度控件从web方法移动到jQuery更改函数,减少无用的ajax调用。。但我真的不明白这怎么可能不是时间问题。。我的意思是,如果我更改zip文本,单击它之外的某个点,然后单击按钮,我将分别触发2个事件,即client jquery change和server button click。用另一种方法(更改zip文本并直接单击按钮)时,它们同时启动,因此当按钮单击开始时,文本更改仍然没有完成其工作并找到旧值。。
<script type="text/javascript" language="javascript">
$(function () {
$(document).on('change', 'input[id*="txtZIP"]', function () {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "CleanAddress.aspx/txtZIP_TextChanged",
data: "{ZIP:'" + $("[id*='txtZIP']").val() + "'}",
dataType: "json",
success: function (response) {
$("[id*=txtProvince]").val(response.d);
},
error: function (result) {
alert("Errore! " + result.status + " - " + result.statusText);
}
});
});
});
</script>
[System.Web.Services.WebMethod]
public static string txtZIP_TextChanged(string ZIP)
{
if ((ZIP.Trim() != "") && (ZIP.Length == 5))
{
dcListCityDataContext dc = new dcListCityDataContext();
if (dc.City.Where(c => c.ZIP.Equals(ZIP)).Count() > 0)
{
string province = dc.City.Where(c => c.ZIP.Equals(CAP)).First().ID_PROVINCE.ToUpper();
if (province != null)
{
return provincia;
}
}
}
return "";
}
protected void btnSave_Click(object sender, ImageClickEventArgs e)
{
try
{
string result = null;
// HERE IS THE PROBLEM, BECAUSE I HAVE THE WRONG VALUE
// IN txtProvince.Text IF I CHANGE THE ZIP CODE AND CLICK
// DIRECTLY ON THE SAVE BUTTON
Save(txtProvince.Text, ddlCity.SelectedItem.ToString(), txtZip.Text, txtAddress.Text);
lblError.Text = "";
}
catch (Exception ex)
{
(...)
}
}