Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ASP.NET在更改文本框、触发客户端事件和服务器事件后单击按钮_Javascript_C#_Jquery_Asp.net_Ajax - Fatal编程技术网

Javascript ASP.NET在更改文本框、触发客户端事件和服务器事件后单击按钮

Javascript ASP.NET在更改文本框、触发客户端事件和服务器事件后单击按钮,javascript,c#,jquery,asp.net,ajax,Javascript,C#,Jquery,Asp.net,Ajax,我有一个用于更改地址的弹出窗口,其中有3个文本框(地址、省和邮政编码)和一个城市的下拉列表。更改邮政编码会通过ajax调用更改省文本框,如果可以的话,我想稍后添加populatecity ddl。问题是,如果我现在更改邮政编码,然后在其外部单击,然后单击“保存”按钮工作正常,我在服务器端函数中的值是正确的,但是如果我更改邮政编码,然后直接单击“保存”按钮,我也可以在界面中看到省文本的正确更改,但在btnSave_中单击它仍然具有旧值。我尝试过不异步ajax调用,但仍然没有 ASPX: 服务器保存

我有一个用于更改地址的弹出窗口,其中有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)
    {
        (...)
    }
}