Ошибка скрипта Ext.net в IE8, которая не возникает в других браузерах (включая IE9) - PullRequest
2 голосов
/ 27 сентября 2011

Я использую ext.net элементы управления в приложении ASP.NET WebForms.
Он отлично работает в Chrome 13-14, Opera 11, FF 6, но не в IE8.
Он выдает ошибки JavaScript, такие как:

Неверный аргумент

И:

BaseMainContent_MainContent_ctlContent_txtFax_txtCountryCode 'не определен

Если мне достаточно информации, как я могуразрешить это?

Пример кода

<div>
    <ext:TextField runat="server" MsgTarget="Side" ID="LoginTxt" IsRemoteValidation="true">
        <RemoteValidation OnValidation="ValidateLogin" ShowBusy="true" />
    </ext:TextField>
</div>
<br />
<div>
    <div>
        <ext:TextField ID="PasswordTxt1" runat="server" InputType="Password"></ext:TextField>
        <ext:TextField runat="server" ID="PasswordTxt2" Vtype="password" FieldLabel="Повторите пароль"
            InputType="Password" MsgTarget="Side" IsRemoteValidation="true">
            <RemoteValidation OnValidation="ValidatePasswords" ShowBusy="true" />
        </ext:TextField>
    </div>
</div>
<div>
    <ext:ComboBox Width="200"  runat="server" ID="LocaleCmb" Editable="false"
        SelectedIndex="0">
        <Items>
            <ext:ListItem Text="Русский" Value="ru-RU" />
            <ext:ListItem Text="English" Value="en-US" />
        </Items>
    </ext:ComboBox>
</div>
<div>
    <ext:TextField runat="server"  ID="LastNameTxt" />
</div>

<ext:TextField runat="server" ID="EmailTxt" MsgTarget="Side" FieldLabel="Email" Vtype="email"
    IsRemoteValidation="true">
    <RemoteValidation OnValidation="ValidateEmail" ShowBusy="true" />
</ext:TextField>
<div>
    <uc:PhoneTextBox2 ID="PhoneUc" runat="server"/>
</div>

<div>
    <uc:PhoneTextBox2 ID="FaxUc" runat="server"  />
</div>
<br />

<div>
    <uc:Address2 Title="Адрес" ID="AddressUc" CoordinatesVisible="false" runat="server" />
</div>
<div>

    <div id="RecaptchaDiv" runat="server" class="x-form-invalid-icon" style="left: 350px; top: 0px;
        position: relative; visibility: visible;">
    </div>
    <recaptcha:RecaptchaControl ID="Recaptcha" runat="server" />
</div>


<ext:Button runat="server" ID="SubmitTxt" Text="Register me">
    <DirectEvents>
        <Click OnEvent="SubmitBtnClick">
            <EventMask ShowMask="true"></EventMask>
        </Click>
    </DirectEvents>
</ext:Button>
<uc:BackLinkButton ID="lnkPreviousPage" runat="server" />

В этом случае ошибка

SCRIPT87: Invalid argument. 
ext.axd?v=21945, line 7 character 31283

ОБНОВЛЕНИЕ: снимок экрана screenshot

ОБНОВЛЕНИЕ2Я забыл сказать, что я хорошо работаю в IE9.Вот источник uc: PhoneTextBox2

<style>
    .invalidPhoneBox
    {
        border-color: #C30;
        background: url('/extjs/resources/images/default/grid/invalid_line-gif/ext.axd') repeat-x scroll center bottom white;
    }
</style>
<ext:CompositeField runat="server" ID="eCompositeField" CombineErrors="false" AutoWidth="true"
    MsgTarget="Title">
    <Items>
        <ext:DisplayField runat="server" Text="(" />
        <ext:NumberField ID="txtCountryCode" Width="29" AllowNegative="false" AllowDecimals="false"
            MaxLength="3" runat="server" />
        <ext:DisplayField runat="server" Text=")" />
        <ext:NumberField runat="server" ID="txtCityCode" Width="58" AllowNegative="false" AllowDecimals="false"
            MaxLength="7" />
        <ext:TextField runat="server" ID="txtMainPhoneNumber" Width="60" MaxLength="7" AllowNegative="false"
            AllowDecimals="false" />
        <ext:TextField runat="server" ID="txtExtraPhoneNumber" Width="44" AllowBlank="false" MaxLength="5"
            AllowNegative="false" AllowDecimals="false" MsgTarget="Side" />
    </Items>
</ext:CompositeField>

код позади

public partial class PhoneTextBox2 : System.Web.UI.UserControl {

    public bool EnableEmptyValues { get; set; }
    public string Title { get; set; }
    protected void Page_Init(object sender, EventArgs e) {
        txtCountryCode.AllowBlank = EnableEmptyValues;
        txtCityCode.AllowBlank = EnableEmptyValues;
        txtMainPhoneNumber.AllowBlank = EnableEmptyValues;

    }

    protected void Page_Load(object sender, EventArgs e) {
        if (!IsPostBack) {
            eCompositeField.FieldLabel = Title;
            // eCompositeField.LabelWidth = Title.Length*5;
            if (!string.IsNullOrWhiteSpace(DataSource)) {

                string[] phoneNumberArray = DataSource.Split('-');
                if (phoneNumberArray.Length >= _standartDimension) {
                    txtCountryCode.Text = phoneNumberArray[0];
                    if (txtCountryCode.Text[0] == _plus) {
                        txtCountryCode.Text = txtCountryCode.Text.Remove(0, 1);
                    }
                    txtCityCode.Text = phoneNumberArray[1];
                    txtMainPhoneNumber.Text = phoneNumberArray[2];
                    if (phoneNumberArray.Length >= _extraDimension) {
                        txtExtraPhoneNumber.Text = phoneNumberArray[3];
                    }
                }
            }
        }
    }



    public string DataSource { get; set; }


    private const string _phoneNumberMask = "+{0}-{1}-{2}-{3}";
    private const char _plus = '+';
    private const int _standartDimension = 3;
    private const int _extraDimension = 4;


    public string Number {
        get {
            if (!string.IsNullOrWhiteSpace(txtCountryCode.Text) &&
                !string.IsNullOrWhiteSpace(txtCityCode.Text) &&
                !string.IsNullOrWhiteSpace(txtMainPhoneNumber.Text)) {


                if (!string.IsNullOrWhiteSpace(txtExtraPhoneNumber.Text))
                    return string.Format(_phoneNumberMask, txtCountryCode.Text, txtCityCode.Text, txtMainPhoneNumber.Text, txtExtraPhoneNumber.Text);

                string phoneNumber = string.Format(_phoneNumberMask, txtCountryCode.Text, txtCityCode.Text, txtMainPhoneNumber.Text, string.Empty);
                return phoneNumber.Remove(phoneNumber.Length - 1);

            }
            return string.Empty;
        }
    }





    public bool IsEmpty {
        get {
            return (string.IsNullOrWhiteSpace(txtCountryCode.Text) &&
                    string.IsNullOrWhiteSpace(txtCityCode.Text) &&
                    string.IsNullOrWhiteSpace(txtMainPhoneNumber.Text) &&
                    string.IsNullOrWhiteSpace(txtMainPhoneNumber.Text));
        }
    }




    /// <summary>
    /// Validate 
    /// </summary>
    public void Validate() {
        if (EnableEmptyValues) {
            if (!IsEmpty && Number == string.Empty)
                MarkInvalid();
            else
                MarkValid();
        }



        else {

            if (IsEmpty)
                MarkInvalid();
            else {

                if (Number == string.Empty)
                    MarkInvalid();
                else
                    MarkValid();
            }
        }
    }

    private const string InvalidFormatNumberMessage = "InvalidFormatNumberMessage";
    private const string EmptyNumberMessage = "EmptyNumberMessage";


    private const string InvalidCls = "invalidPhoneBox";
    public void MarkInvalid(string msg = null) {
       // eCompositeField.AddLabelCls(InvalidCls);
        txtCountryCode.MarkInvalid(msg);
        txtCityCode.MarkInvalid(msg);
        txtMainPhoneNumber.MarkInvalid(msg);
        txtExtraPhoneNumber.MarkInvalid(msg);

    }

    public void MarkValid() {
        //eCompositeField.RemoveLabelCls(InvalidCls);

        //eCompositeField.MarkAsValid();
        txtCountryCode.MarkAsValid();
        txtCityCode.MarkAsValid();
        txtMainPhoneNumber.MarkAsValid();
        txtExtraPhoneNumber.MarkAsValid();
    }


    public const string InvalidCheckBoxCssStyle = "border-color:#C30; background:  url('/extjs/resources/images/default/grid/invalid_line-gif/ext.axd') repeat-x scroll center bottom white; width: 40px !important;";
    public const string ValidCheckBoxCssStyle = "border-color:#000; background: none repeat scroll 0 0 transparent;";

}

1 Ответ

0 голосов
/ 02 декабря 2011

У меня была именно эта ошибка, и хотя я не могу точно воспроизвести ваш случай, надеюсь, я могу дать вам хорошее представление о том, как ее исправить.Проблема в том, что каким-то образом недопустимая ширина назначается одному из элементов управления на странице.Это может произойти из-за неправильной конфигурации в разметке или из-за ошибки в Ext.NET.Чтобы определить, какой элемент управления неисправен:

  1. Загрузите страницу в IE8 и разрешите встроенному отладчику сценариев остановить выполнение в точке, показанной на скриншоте.
  2. СправаВ разделе «Рука» панели разработчика нажмите кнопку вкладки «Наблюдать» и добавьте часы для H. Раскрывайте дерево, пока не увидите свойство ID.Это даст вам ClientID элемента управления, вызывающего проблему.
  3. Найдите элемент управления в разметке .ascx и убедитесь, что у вас правильная конфигурация ширины.Правильная конфигурация может зависеть от макета, используемого для родительского контейнера.Попробуйте различные способы установки ширины, чтобы увидеть, решит ли это проблему.

Надеемся, что эти шаги помогут вам сузить элемент управления, вызывающий ошибку, и исправить ее.В моем случае я использовал AutoWidth = "True".Изменение на AnchorHor Horizontal = "100%" исправило проблему.

...