Как мне запустить проверку ASP.Net на стороне клиента? - PullRequest
3 голосов
/ 03 июня 2009

Я пытаюсь запустить проверку на стороне клиента. Я собрал очень простой тест - имя файла aTET3.aspx:

<%@ Page Language="C#" AutoEventWireup="true" 
    CodeFile="aTET3.aspx.cs" Inherits="aTET3" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>TEST</title>

    <script type="text/javascript">
    //<![CDATA[
    function TEST() 
    {
        alert("INSIDE TEST");
        alert("ValidatorCommonOnSubmit()=" + ValidatorCommonOnSubmit());
        alert("Page_ClientValidate()=" + Page_ClientValidate());
    }
    //]]>
    </script>
</head>

<body link="#1A548E" vlink="#1A548E" alink="#1A548E" onunload="TEST()">

<form name="appForm" method="post" action="aTET3.aspx" id="appForm" runat="server">
<asp:ValidationSummary id="appValidationSummary" 
    ValidationGroup="appValidation" 
    DisplayMode="List"
    EnableClientScript="true"
    HeaderText="Loan application not ready"
    runat="server"
    Enabled="true"
    Visible="true" 
    ShowSummary="true" />
<asp:Label ID="lblMessage" Font-Bold="true" ForeColor="Red" runat="server" />

<br />
Enter amount:

<asp:RequiredFieldValidator ID="ApplicationAmountValidator" 
    ValidationGroup="appValidation" 
    ControlToValidate="txtApplicationAmount"
    ErrorMessage="Application amount is required." 
    EnableClientScript="true" 
    Enable="true"
    Display="Dynamic"
    runat="server">+++</asp:RequiredFieldValidator>

<asp:TextBox ID="txtApplicationAmount" Columns="6" runat="server" />

<br /><br />

<asp:Button ID="btnSave" runat="server" Text="Send Application" 
     CausesValidation="true" />

</form>


</body>
</html>

На странице есть одно текстовое поле с RequiredFieldValidator. Существует также элемент управления ValidationSummary и кнопка отправки. (Я добавил метод TEST (), вызываемый при Unload, для проверки состояния страницы непосредственно перед обратным вызовом.) Проверка на стороне клиента не происходит; вместо этого запрос отправляется обратно на сервер. Если я вызываю Validate () на сервере, я получаю подтверждение.

Я попытался добавить ValidateRequest = "true" в директиву Page с теми же результатами.

Когда я смотрю на испускаемый Javascript, несколько вещей выпрыгивают из меня. Вот часть этого:

<script type="text/javascript">
<!--
var Page_ValidationActive = false;
if (typeof(ValidatorOnLoad) == "function") {
    ValidatorOnLoad();
}

function ValidatorOnSubmit() {
    if (Page_ValidationActive) {
        return ValidatorCommonOnSubmit();
    }
    else {
        return true;
    }
}
// -->
</script>

Обратите внимание, что Page_ValidationActive имеет значение False, что означает, что ValidatorOnSubmit всегда возвращает true. Мне это кажется странным, за исключением того, что я посмотрел на 'WebUIValidation.js' и увидел, что ValidatorCommonOnSubmit так или иначе не проверяет страницу, а метод Page_ClientValidate (), но как мне заставить его работать?

В моем методе TEST (), когда я вручную вызываю Page_ClientValidate (), форма получает проверенную клиентскую сторону, как и ожидалось, и запрос на обратную передачу отправляется обратно на сервер.

Я тестировал FireFox 3.0.10 и MSIE 7 с одинаковыми результатами.

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

1 Ответ

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

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

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