Как установить Page.IsValid в ASP.Net - PullRequest
4 голосов
/ 22 июня 2009

Когда свойство класса страницы IsValid доступно только для чтения, как я могу установить его, используя собственный метод проверки?

Пока все, что я смог сделать, это установить это свойство, вызывая Page.Validate().

Как мне написать свою собственную функциональность, которая изменит свойство IsValid так же, как Page.Validate()?

Ответы [ 5 ]

10 голосов
/ 22 июня 2009

Вы не устанавливаете IsValid напрямую, вместо этого вы вызываете Validate () метод объекта Page .Если у вас есть пользовательские методы проверки, вам нужно использовать объект CustomValidator и установить эту функцию в свойстве проверки на стороне сервера.

  <asp:CustomValidator ID="YourValidator" runat="server" SetFocusOnError="true"  
      ControlToValidate="YourControl"
        ClientValidationFunction="YOUR_JAVASCRIPT_FUNCTION" 
        OnServerValidate="YOUR_SERVER_VALIDATION_FUNCTION" Text="*" />
3 голосов
/ 27 февраля 2014

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

Добавлено на страницу .aspx:

<asp:TextBox ID="txtDummy" runat="server" Visible="false" />
<asp:RangeValidator ID="rvDummy" ControlToValidate="txtDummy" runat="server" MinimumValue="1" MaximumValue="2" />

А потом я добавил это к коду:

bool makeMyPageInvalid = true;
if (makeMyPageInvalid)
    txtDummy.Text = "0";

Page.Validate();

if (Page.IsValid)
    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "test", "alert('valid');", true);
else
    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "test", "alert('not valid');", true);

Вы можете видеть, что это только позволяет принудительно проверить правильность страницы. Вы можете использовать любой валидатор или причину, чтобы установить это. Надеюсь, это кому-нибудь поможет!

2 голосов
/ 22 июня 2009

Свойство IsValid доступно только для чтения, поскольку оно предназначено для использования с валидаторами на стороне сервера и на стороне клиента, такими как RequiredFieldValidator и RegularExpressionValidator. Это только для чтения, потому что вы не можете заставить страницу быть действительной программно. «Действительный» в этом контексте означает, что все валидаторы на странице оцениваются как true.

1 голос
/ 12 июня 2015

Это действительно старый вопрос, но он возник при поиске, поэтому я решил добавить к нему свой ответ. Сначала создайте метод расширения в одном из ваших вспомогательных классов.

public static IEnumerable<T> GetAllControlsOfType<T>(this Control parent) where T : Control
{
    var result = new List<T>();
    foreach (Control control in parent.Controls)
    {
        if (control is T)
        {
            result.Add((T)control);
        }
        if (control.HasControls())
        {
            result.AddRange(control.GetAllControlsOfType<T>());
        }
    }
    return result;
}

Теперь в вашем коде позади файла, переберите все валидаторы на странице, которая не проверяет.

foreach (var validator in Page.GetAllControlsOfType<BaseValidator>().Where(w => !w.IsValid))
{
    validator.IsValid = true;
}
1 голос
/ 08 марта 2012

Если вы хотите использовать какой-то JavaScript, вы можете сделать это на стороне клиента, изменив переменную Page_IsValid следующим образом:

function pageLoad() {
    Page_IsValid = false;
}

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

function valid() {
    if (!Page_IsValid) {
        alert("Some Questions Remain Unanswered and are Marked with a Red Asterisc. ( * )");
    }

(вначале я думал, «кто отправит форму без данных», но раньше, чем позже, я понял, что это произойдет)

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