Условно отключить проверку - PullRequest
1 голос
/ 04 июля 2011

У меня есть форма с несколькими текстовыми полями, которая проходит проверку (как на стороне сервера, так и на стороне клиента).В форме у меня есть кнопки: «Далее», «Назад», «Отмена».Поэтому мне не нужна проверка для запуска, после чего пользователь нажимает кнопки «назад» или «отмена».Как мне этого добиться?Заранее спасибо!


Пример:

<div class="buttons">    
<input type="submit" name="cancelButton" value="" />
<input type="submit" name="backButton" value="" />
<input type="submit" name="nextButton" value="" />
</div>

<% using (Html.BeginForm()) { %>
    <p>

    <table style="width: 200px">    
    <tr><td align="center" colspan=2><%= Html.ValidationMessageFor(m => m.street) %><%= Html.DropDownListFor(m => m.street, Model.streetsList) %></td></tr>
    <tr><td colspan=2>&nbsp;</td></tr>
    <tr><td valign="bottom" align="right" style="width: 75px"><%= Html.LabelFor(m => m.flatNumber) %>:</td><td align=left><%= Html.TextBoxFor(m => m.flatNumber, new { maxlength = 6, style = "width: 48px;" })%> <%= Html.ValidationMessageFor(m => m.flatNumber) %></td></tr>
    </table>
    <br />

        <input type="submit" class="refusal button red floatL" name="cancelButton" value="" />
        <input type="submit" class="back button green floatL" name="backButton" value="" />
        <input type="submit" class="continue button green floatR marR" name="nextButton" value="" />
    </div>
    <div class="clear">
    </div>
    <% } %>

На стороне сервера я использую атрибуты DataAnnotations для проверки.

Ответы [ 2 ]

3 голосов
/ 04 июля 2011

Класс Button имеет свойство CausesValidation - если для него установлено значение false, проверка не будет запускаться при обратной передаче.

Пример:

<asp:Button id="btnCancel" CausesValidation="false" onClick="bntCancel_Click" Text="Cancel" runat="server" />

Обратите внимание, что это отключитВалидаторы ASP.NET - если у вас есть своя валидация, вам нужно отключить ее другим способом.

2 голосов
/ 04 июля 2011

Окружите текстовые поля формой и поверните следующий, назад и отмените в кнопки отправки. В случае события onsubmit назначьте метод, который возвращает true, если форма верна, и должен продолжить отправку ее на сервер, в противном случае - false.

Так что я бы ожидал что-то вроде:

<form id="navigatorForm">
    <!-- Various text forms here -->

    <input type="submit" value="Back" onsubmit="back()" />
    <input type="submit" value="Next" onsubmit="next()" />
    <input type="submit" value="Cancel" onsubmit="cancel()" />
    <input type="hidden" id="operation" name="operation" value="" />
</form>

<script type="text/javascript">
function validate() {
    // Perform validation here
    // If okay, return true, else false
}

function next() {
    document.getElementById('operation').value = 'next';
    if(!validate()) {
        alert('Form is not filed correctly.  Please pay more attention!');
        return false;  // Do not send to server!  
    } else {
        return true;
    }
}

function back() {
    document.getElementById('operation').value = 'back';
    return true;
}

function cancel() {
    document.getElementById('operation').value = 'cancel';
    return true;
}
</script>

Обратите внимание, что в отличие от next (), back () и cancel () безоговорочно возвращают true, что означает, что запрос отправляется на сервер при любых обстоятельствах. На этом этапе на стороне сервера вам нужно будет только проверить, находится ли следующая операция, чтобы узнать, следует ли вам проводить дальнейшее тестирование.

...