2011-07-04 92 views
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屬性的驗證。

+0

您的驗證如何工作?與js?用插件?你能告訴我們一些你的代碼的重要部分嗎? – JMax

+0

對不起。只需在我的問題中添加一些代碼示例。謝謝! – kseen

回答

3

Button類具有CausesValidation屬性 - 如果設置爲false,則在回發時不會觸發驗證。

例子:

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

注意,這將禁用ASP.NET驗證器 - 如果你有自己的驗證,你需要禁用它的另一種方式。

+0

感謝您的回答蒂姆!問題是我使用簡單的'' – kseen

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> 

注意,與下一個(),回()和取消()無條件地返回true,這意味着該請求在任何發送到服務器環境。此時,在服務器端,您只需檢查下一步是否需要進行進一步的測試。

+0

謝謝尼爾!我剛剛使用了'MicrosoftMVCValidation.js'和'<%Html.EnableClientValidation(); %>'表達式,所以我沒有爲此寫任何代碼。 – kseen