Разрешить сохранение веб-части с действительными данными при отображении ошибок проверки для других веб-частей - PullRequest
0 голосов
/ 01 марта 2012

У меня есть страница ASP.Net, состоящая из нескольких веб-частей (C # - ascx).По определению я не знаю, сколько веб-частей на странице.Я не контролирую страницу, только мои части, которые добавляются на эту страницу.На той же странице могут быть части других авторов, но это сейчас не важно.

Большинство веб-частей предназначены для отображения и редактирования информации.Каждая такая часть имеет свои собственные ValidationGroup и ValidationSummary, а также свою собственную кнопку Сохранить.Текущие требования требуют, чтобы каждая часть сохранялась отдельно.Все эти части могут быть одинаковыми или выбираться только из трех разновидностей, но они настроены на отображение разных подмножеств данных из базы данных.Каждая часть может иметь обязательные поля, используя RequiredFieldValidator.

Другой тип веб-части служит заголовком / сводкой.Он почти всегда будет отображаться один раз, хотя он может появляться в любом месте на странице или (возможно) появляться более одного раза.

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

bool foundAnyInvalid = false;
Dictionary<string, bool> Parts = new Dictionary<string, bool>();
foreach (System.Web.UI.WebControls.BaseValidator val in Page.Validators)
{
    if (!Parts.ContainsKey(val.ValidationGroup))
    {
        Parts.Add(val.ValidationGroup, true);
        Page.Validate(val.ValidationGroup);
    }
    if (!val.IsValid)
    {
        Parts[val.ValidationGroup] = false;
        foundAnyInvalid = true;
    }
}

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

Чего я хочу добиться:

  • В заголовке всегда отображается списокдетали, которые не имеют проверок

  • Все детали детали отображают типичный красный * рядом с полями, которые обязательны для заполнения

  • Если сохранить в конкретной деталиЕсли щелкнуть деталь, то Validator.Message и ValidatorSummary для этой части отобразят типичные сообщения.(«Требуется Foo»)

  • Если пользователь нажимает сохранить на допустимой детали, данные должны быть сохранены, даже если в других деталях все еще отсутствуют данные.

В качестве вторичной и несколько связанной проблемы заголовок содержит ссылку "вернуться назад".Я хочу отключить эту ссылку, если какая-либо часть не является действительной и сохранена.Если это слишком много, чтобы укусить в одном вопросе, я спрошу об этом отдельно, но я подумал, что должен упомянуть об этом на случай, если это повлияет на предлагаемые ответы.(Возможно, мне придется проверить этот, проверив базу данных вместо формы.)

Я бы рассмотрел вопрос сохранения всех частей при нажатии любой кнопки Сохранить, но я не сразу уверен, как это сделать.,Если я захожу на эту страницу неправильно, пожалуйста, не стесняйтесь и мне об этом сказать.

1 Ответ

0 голосов
/ 02 марта 2012

Вы пытались установить ValidationGroup на что-то уникальное?

Я не пробовал это для веб-частей, но для одной страницы ASPX вы можете использовать ValidationGroup для запуска различных проверок.

    <asp:TextBox runat="server" ID="textbox1" ValidationGroup="uniqueForThisPageValGroup1" />
    <asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ValidationGroup="uniqueForThisPageValGroup1" ControlToValidate="textbox1" SetFocusOnError="True" ErrorMessage="Requires a value." /><br />
    <asp:Button runat="server" ID="button1" Text="Submit" ValidationGroup="uniqueForThisPageValGroup1" /><br />

    <hr />

    <asp:TextBox runat="server" ID="textbox2" ValidationGroup="uniqueForThisPageValGroup2" />
    <asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator2" ValidationGroup="uniqueForThisPageValGroup2" ControlToValidate="textbox2" SetFocusOnError="True" ErrorMessage="Requires a value." /><br />
    <asp:Button runat="server" ID="button2" Text="Submit" ValidationGroup="uniqueForThisPageValGroup2" /><br />

Добавьте это на страницу ASPX и попробуйте щелкнуть по различным кнопкам отправки, и вы увидите, что он выполняет проверку только для тех, которые соответствуют ValidationGroup.

...