有条件地禁用验证

时间:2011-07-04 08:03:23

标签: asp.net asp.net-mvc-2 asp.net-mvc-validation

我的表单只有几个文本框,经过验证(服务器端和客户端)。在表单中我有按钮:“下一步”,“后退”,“取消”。所以我不需要验证启动然后用户点击“返回”或“取消”按钮。我怎样才能做到这一点? 提前谢谢!


一些样本:

<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 个答案:

答案 0 :(得分:3)

Button类具有CausesValidation属性 - 如果设置为false,则不会在回发时触发验证。

示例:

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

请注意,这将禁用ASP.NET验证程序 - 如果您有自己的验证,则需要以其他方式禁用它。

答案 1 :(得分: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,这意味着请求在任何情况下都会发送到服务器。此时,在服务器端,您只需要检查操作是否接下来就知道您是否应该执行进一步的测试。