前言:一般在工作上我們會使用RequiredFieldValidator等asp元件配合TextBox元件去實做必填非必填等功能,但是當遇到RadioButton元件時 竟然無法搭配RequiredFieldValidator元件做使用,此時爬了文發現.net還有一個客製化的元件叫做CustonValidator,讓我可以去驗證更多不只是TextBox以外的控制項,結合Js去判斷是否勾選等等。
Html 語法:從語法可以看到這是一組選擇狀態的RadioButton Group,每一組RadioButton 下面都會放置一個CustomValidator進行驗證,其中Question屬性是額外加入為了讓之後的Js可以辨別出哪一組Button為填寫,該JS函式放置在ClientValidationFundation 的屬性裡如ClientValidationFunction="CustomValidator1_ClientValidate", JS 中的CustomValidator1_ClientValidate(source,args)函示,透過source即可取得該驗證物件。
<div class="row">
<label class="col-md-5 col-form-label text-left"><span class="text-danger">*</span> 狀態</label>
<div class="col-md-7">
<div class="form-check" style="margin-top: 15px;">
<label class="form-check-label">
<asp:RadioButton ID="rb狀態_1" AutoPostBack="true" OnCheckedChanged="rb狀態_1_CheckedChanged" runat="server" Text="已獲准" GroupName="狀態" />
</label>
<label class="form-check-label">
<asp:RadioButton ID="rb狀態_2" AutoPostBack="true" OnCheckedChanged="rb狀態_2_CheckedChanged" runat="server" Text="申請中" GroupName="狀態" />
</label>
<label class="form-check-label">
<asp:RadioButton ID="rb狀態_3" AutoPostBack="true" OnCheckedChanged="rb狀態_3_CheckedChanged" runat="server" Text="著作/出版品完成後即取得智財權" GroupName="狀態" />
</label>
<asp:CustomValidator ID="CustomValidator3" Question="狀態" runat="server" ClientValidationFunction="CustomValidator1_ClientValidate" ForeColor ="Red" ErrorMessage="請勾選題目!"></asp:CustomValidator>
</div>
</div>
</div>
JS語法:透過JQuery中的$('#'+ID).attr()等函示透過Question屬性即可取得驗證元件,之後要進行是否有勾選等驗證就輕鬆多了。
function CustomValidator1_ClientValidate(source, args) {
var question = $('#' + source.id).attr("Question");
var radioValue = $("input[name='" + question + "']:checked").val();
if (radioValue) {
args.IsValid = true;
}
else {
args.IsValid = false;
}
}