1

検証を通過するテキストボックスがほとんどないフォームがあります(サーバー側とクライアント側の両方)。フォームには、「次へ」、「戻る」、「キャンセル」というボタンがあります。したがって、起動するための検証は必要なく、ユーザーは「戻る」または「キャンセル」ボタンをクリックします。どうすればこれを達成できますか?前もって感謝します!


いくつかのサンプル:

<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 属性を使用します。

4

2 に答える 2

3

Button クラスには CausesValidation プロパティがあります。これが false に設定されている場合、ポストバック時に検証はトリガーされません。

例:

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

これにより ASP.NET バリデータが無効になることに注意してください。独自の検証がある場合は、別の方法で無効にする必要があります。

于 2011-07-04T08:13:52.743 に答える
2

テキスト ボックスをフォームで囲み、[次へ]、[戻る]、[キャンセル] ボタンを送信ボタンにします。イベント 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 を返すことに注意してください。これは、リクエストがどのような状況でもサーバーに送信されることを意味します。この時点で、サーバー側では、さらにテストを実行する必要があるかどうかを判断するために、次に操作があるかどうかを確認するだけで済みます。

于 2011-07-04T08:16:47.317 に答える