Ожидается ошибка объекта Page_ClientValidate (), не удается найти валидатор - PullRequest
10 голосов
/ 30 марта 2011

У меня есть форма HomePage.aspx, содержащая пустую таблицу asp: Panel, раскрывающийся список, позволяющий пользователю выбрать SPFielType ... по индексу изменен, моя страница HomePage.aspx.cs получит выбранный текст и загрузит пользовательский элемент управления внутри панели этот пользовательский элемент управления сгенерирует элемент управления на основе spfieldtype, выбранного пользователем, и кнопки, вызывающей функцию validateForm () ... моя проблема в том, что функция Page_ClientValidate () внутри validateForm () не может найти валидатор, Я также попытался дать имя группы, но все еще не работает.
Когда я помещаю кнопку внутри своей страницы aspx (не рендеринг динамически), она проверяет мою страницу. (<asp:Button ID="submitbutton" Text="Validate" runat="server" />).
Но когда я рендерил его динамически, я не могу проверить форму .. Это то, что я пытаюсь сделать:

protected override void CreateChildControls()
{
    try
    {
        fieldRenderingControl = this.CreateFieldRenderingControl(this.FieldType);
        this.Controls.Add(fieldRenderingControl);

        Button button = new Button();
        button.UseSubmitBehavior = false;
        button.Text = "ValidateButton";
        button.ID = "ValidateButton";
        button.OnClientClick = "validateForm()";
        this.Controls.Add(button);

        RequiredFieldValidator newValidator = new RequiredFieldValidator();
        newValidator.Text = "***";
        newValidator.ID = "valideee";
        newValidator.EnableClientScript = true;
        newValidator.Enabled = true;
        newValidator.SetFocusOnError = true;
        newValidator.Display = ValidatorDisplay.Dynamic;
        newValidator.ControlToValidate = fieldRenderingControl.ID;
        this.Controls.Add(newValidator);

    }
    catch (Exception ex)
    {
    }

}

// функция CreateFieldRenderingControl () сгенерирует элемент управления на основе аргумента fieldType, выбранного пользователем.

Заранее спасибо.

Ответы [ 6 ]

3 голосов
/ 28 мая 2011

Sharepoint имеет неприятную причуду, где он может назначить Guid идентификатором элемента управления. Я видел JavaScript, сгенерированный Sharepoint, который пытался использовать эти Guids в качестве имен переменных. Это нехорошо - это нарушает скрипты - дефисы не допускаются в именах переменных JavaScript. Я подозреваю, что это проблема, которую вы испытываете. И я предполагаю, что виновником является this.CreateFieldRenderingControl(). Похоже, что этот метод генерирует Id ... это Iid Guid? Если это так, попробуйте перезаписать Id чем-нибудь безопасным, возможно, просто удалите черточки из Guid.

fieldRenderingControl.ID.Replace("-", "");

Если это не точное решение, надеюсь, этого будет достаточно, чтобы вы указали в правильном направлении.

0 голосов
/ 16 июня 2011

Может быть, этот пост слишком поздно ... но вот некоторые идеи ...
Есть несколько возможных вещей:
(1) Валидатор и проверяемый элемент управления находятся на одной панели? Возможно, во время проверки существует скрытая панель.
(2) Если вы создаете динамически, было ли это создание помещено в загрузку страницы? и если да, был ли он создан внутри функции для проверки ввода в первый раз? Возможно, что в этом нет необходимости.
(3) Использование защищенного переопределения void CreateChildControls () в конечном итоге не запускается во всем процессе перезагрузки, особенно если ViewState изменяется в некоторых элементах управления. Вы можете поместить его в Page Load.
(4) Другой альтернативой является размещение кнопки внутри панели, но атрибут visible = false, а также валидатор с атрибутом enabled = false. Когда вы запускаете действие, вы меняете эти два состояния и можете работать с PostBack.

0 голосов
/ 27 мая 2011

Вместо Page_ClientValidate () используйте:

ValidatorValidate("id of field rendering control");

Но в одном из ваших ответов этот идентификатор является «Field_4a4ab3a1-d5cc-4fbb-a212-ec5697827c75», и это недопустимый идентификатор клиента. Дефисы не могут быть использованы. Во-первых, убедитесь в правильности идентификатора в клиенте.

0 голосов
/ 25 мая 2011

Попробуйте это:

newValidator.ControlToValidate = fieldRenderingControl.ClientID;
0 голосов
/ 25 мая 2011

попробуйте это (передайте имя группы в качестве аргумента в функции Page_ClientValidation)

Page_ClientValidation("group")
0 голосов
/ 22 апреля 2011

После загрузки элемента управления проверьте идентификатор элемента управления с помощью Firebug или просто просмотрите исходный код HTML, поскольку существуют определенные элементы управления, которые при добавлении других элементов управления изменяют их идентификатор при рендеринге. Если можете, напишите также код htmnl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...