我們有許多客戶可以在其網站上註冊的表單。這是可定製的,表單的所有者可以設置一個字段在窗體上顯示或隱藏,也是必需的。但是,如果顯示某些字段,則需要設置另一個字段以使表單有效。所以驗證可能會非常棘手。另一個棘手的部分是,我們希望所有的錯誤消息在驗證總結中一起顯示。如果我只是有我自己的函數被稱爲onclientclick linkbutton我不能添加它生成的任何錯誤消息到驗證摘要。客戶端驗證不起作用的自定義驗證器
所以我們最初找到的解決方案是在頁面上創建一個自定義驗證器,而不設置它的controltovalidate屬性,但將它的clientvalidationfunction設置爲我們想調用的函數。這允許我們設置發件人參數的錯誤消息,以便它隨後出現在驗證摘要中。
我們需要添加一些額外的驗證邏輯,當我這樣做時,我意識到頁面不再像以前那樣工作了(我認爲它在.net 2中工作,現在我們在.net 4上)。
這裏是我有的基本的html代碼。
網頁 -
<asp:ValidationSummary ID="vsummary" runat="server" HeaderText="Oops, it appears the following required fields are not completed." CssClass="error" />
<asp:CustomValidator ID="cstCustomScripts" runat="server" ClientValidationFunction="ValidateExtraFields" />
...additional form fields here
<asp:LinkButton ID="btnAddUpdate" runat="server" onclick="SubmitProfile" />
和得到通過自定義驗證調用的JavaScript ...
function ValidateExtraFields(sender, args) {
args.IsValid = true;
if (typeof window.RelocationSelectionRequired == 'function') {
if (!RelocationSelectionRequired()){
args.IsValid = false;
sender.errormessage = "If you are open to relocating, please select the state(s) and cities.";
return;
}
}
if (typeof window.ValidateHomeState == 'function') {
if (!ValidateHomeState()) {
args.IsValid = false;
sender.errormessage = "Home state is required.";
return;
}
}
if (typeof window.ValidateWorkState == 'function') {
if (!ValidateWorkState()) {
args.IsValid = false;
sender.errormessage = "Work state is required.";
return;
}
}
var invalidNumberField = "";
$("[data-validate-function='GreaterThanZero']").each(function() {
var t = $(this);
if (t.val().trim() == "0") {
args.IsValid = false;
invalidNumberField = t.attr("controlName");
return false;
}
});
if (invalidNumberField.length > 0) {
sender.errormessage = invalidNumberField + " cannot be zero.";
return;
}
}
在過去的功能會成功追加任何消息,從這個功能在ValidationSummary控制並不提交表格。現在它仍然追加消息,但表單也不應該提交。有誰知道這是從.net 2轉移到.net 4的結果嗎?還是有其他原因,它不再有效?謝謝。
我從來沒有需要過。如果我在頁面上留下其他必填字段中的一個,驗證對他們來說工作正常 - 表單不提交。只是踢了我試了一下,但仍然在提交表單。 –