根据maxlength键入额外字符时,将删除Masked Edit Extender文本

时间:2013-12-27 23:21:06

标签: c# asp.net ajaxcontroltoolkit

我遇到了Masked Edit Extender的一个奇怪问题。我需要根据下拉列表的选定值在运行时为某些文本输入添加Mask和Max Length属性。它在几乎所有浏览器中都能正常工作,但是在IE 8中,根据另一个用户,也在IE 11上发生,当我输入超出Max Length的额外字符时,文本输入的当前值被删除并且新的字符类型被捕获删除其他所有内容。

我不知道这些浏览器有什么问题,如果已经有了解决方法,或者我做错了什么。

这是一个很大的全景:

更改DropDownList的选项时,我知道MaxLength和要显示的蒙版。

所以我的代码是这样的(所有内容都在更新面板中):

<asp:DropDownList ID="ddlCardType" runat="server" Width="334px" OnSelectedIndexChanged="ddlCardType_OnSelectedIndexChanged" AutoPostBack="true"></asp:DropDownList>

<asp:TextBox ID="txtAccountNumber" runat="server" CssClass="input" Width="328px" MaxLength="18"></asp:TextBox>

<asp:RequiredFieldValidator ID="rfvAccountNumber" runat="server" ControlToValidate="txtAccountNumber"
                                                                                        ErrorMessage="Type the account number">*</asp:RequiredFieldValidator>

<ajaxToolkit:MaskedEditExtender ID="meeAccountNumber" runat="server" TargetControlID="txtAccountNumber"
                                                                                        MessageValidatorTip="true" OnFocusCssClass="MaskedEditFocus" OnInvalidCssClass="MaskedEditError"
                                                                                        InputDirection="LeftToRight" ErrorTooltipEnabled="true" Mask="9999999999999999"
                                                                                        ClearMaskOnLostFocus="false" /> 


<ajaxToolkit:MaskedEditValidator ID="mevAccountNumber" runat="server" ControlExtender="meeAccountNumber"
                                                                                        ControlToValidate="txtAccountNumber" IsValidEmpty="false" InvalidValueMessage="Invalid Account"
                                                                                        Display="Dynamic" EmptyValueMessage="Account cannot be empty" ErrorMessage="Invalid Account" />


protected void ddlCardType_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        List<crmBank> oListBanks = ViewState["oListBanks"] as List<crmBank>;
        var oSelectedBank = oListBanks.Where(i => i.Id == ddlBank.SelectedValue).SingleOrDefault();
        var oSelectedCard = oSelectedBank.CardList.Where(i => i.Id == ddlCardType.SelectedValue).SingleOrDefault();
        LimitText(oSelectedCard.Length);
        meeAccountNumber.Mask = oSelectedCard.Mask;
        meeAccountNumber.EnsureValid();
    }

    private void LimitText(int characters)
    {
        txtAccountNumber.MaxLength = caracteres;
        if (txtAccountNumber.Text.Trim().Length > txtAccountNumber.MaxLength)
        {
            txtAccountNumber.Text = string.Empty;
        }
    }

我现在拥有的当前掩码值是

  • 9999999999999999(最大长度16)
  • 9999-9999-9999-9999(最大长度19)
  • 9999-999999-9999(最大长度17)

我需要使用蒙版获取文本输入的值,这样我才能使用ClearMaskOnLostFocus="false"

因此,在第一个掩码中,如果我的用户键入字符17,例如0123456789123456 * 7 *所有值都将被删除而不是HTML最大长度属性会阻止输入额外字符,因此它会保留在0123456789123456,它变得只有7

有谁知道发生了什么或者可能发生什么,以及如何让它在所有浏览器中都有效?

我对JQuery选项或类似的东西持开放态度。我只需要根据dropDownList值根据动态掩码获取值,以防没有修复此问题。但只记得面具最大长度会改变,所以我需要做一些ajax调用才能获得这些值。

我知道我必须发布我尝试的内容但是,我认为它是蒙版编辑扩展器的一个特定问题,因为如果我不放置掩码,则在运行时解析的Max Length属性按预期工作。它可以防止输入额外的字符,因此必须有一些

我正在使用的ajax工具包版本是用nuget下载的,所以我应该有最近的版本。

根据NUget,我有7.0725。如果我单击引用属性,则表示版本为:3.5.7.725和运行时版本v2.0.50727

感谢您的宝贵帮助,

0 个答案:

没有答案