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

时间:2015-03-27 16:45:49

标签: javascript c# jquery asp.net ajax

我有一个弹出窗口,用于更改地址,包含3个文本框(地址,省和ZIP)和一个用于城市的DropDownList。更改邮政编码,它会使用ajax调用更改省文本框,如果我可以使用它,我想稍后添加填充城市ddl。问题是,如果我现在更改邮政编码,然后单击其外部然后单击保存按钮工作正常,我在服务器端功能中有正确的值,但如果我更改邮政编码然后直接单击到保存按钮我也可以在界面中看到省文本正确更改,但在btnSave_Click中它仍然具有旧值。我试图让ajax调用不同步,但仍然没有..

ASPX:

<table>
    <tr>
        <td>
            <label>Address</label>
            <asp:TextBox ID="txtAddress" runat="server"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td>
            <label>Province</label>
            <asp:TextBox ID="txtProvince" runat="server"></asp:TextBox> 
        </td>
        <td>
            <label>City</label>
            <asp:DropDownList ID="ddlCity" runat="server"></asp:DropDownList>
        </td>
        <td>
            <label>ZIP Code</label>
            <asp:TextBox ID="txtZIP" runat="server"></asp:TextBox>
        </td>
    </tr>
    <tr>
        <td colspan="3"><asp:Label id="lblError" runat="server" style="color:Red" Visible="false" /></td>
    </tr>
    <tr>
        <td colspan="3" style="text-align: center">
            <asp:ImageButton ID="btnResidenza" ImageUrl="/Images/Button/salva.png" runat="server"
                    OnClick="btnSave_Click" />
        </td>
    </tr>
</table>

jQuery的:

<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)
    {
        (...)
    }
}

1 个答案:

答案 0 :(得分:0)

看起来像Jquery onchange这样。可能只有在失去焦点时才会开火。可以尝试使用事件OnkeyUp。这将更新相应字段中按下的任何键的字段。

评论更新: 使用OnKeyUp会有性能损失,但对于小应用程序,它很好!!!

相关问题