![](/img/trans.png)
[英]JS grabbing text from text-boxes, passing to asp.net mvc ActionResult but ActionResult parameters appear null
[英]Either or type validation on 2 text-boxes - ASP.NET Webforms
我在“注冊”頁面上有兩個文本框字段,我正在嘗試設置任一種類型的驗證。 當兩個字段都為空時,驗證應該啟動,說您必須輸入A或B字段中的任何一個才能注冊。
我在我的代碼中使用了如下所示的自定義驗證器,但它似乎不起作用。 我正在尋找一種智能方法來驗證這兩個文本框。 服務器端驗證部分:當我測試它時,斷點永遠不會到達該功能。 有人可以建議一個干凈的方式來做到這一點。
請注意,對於頁面上的其他控件,我需要字段驗證器,我不能在這里有一個,因為我應該能夠為這兩個文本框設置其中一個或條件。
<div class="form-group">
<asp:Label Text="" ID="lblSCGrantNumber" runat="server" AssociatedControlID="txtStateCommGrantNumber">
State Commission Number
</asp:Label>
<asp:TextBox ID="txtStateCommGrantNumber" runat="server" TextMode="SingleLine" placeholder="State Commission Grant Number" AutoCompleteType="None" class="form-control"></asp:TextBox>
<%-- <asp:RequiredFieldValidator Display="Dynamic" ID="rfStateCommGrantNumber" Text="Required" SetFocusOnError="true" CssClass="text-danger" ControlToValidate="txtStateCommGrantNumber" runat="server"></asp:RequiredFieldValidator>--%>
<asp:CustomValidator ID="stateCommissionGrants" runat="server" OnServerValidate="ServerValidation" OnClientValidate="Validate_textboxes" ControlToValidate="txtStateCommGrantNumber" ErrorMessage="One of the two fields is required" ValidateEmptyText="true"></asp:CustomValidator>
</div>
<div class="form-group">
<asp:Label Text="" ID="lblGrantNumber" runat="server" AssociatedControlID="txtStateCommGrantNumber">
Grant Number
</asp:Label>
<asp:TextBox ID="txtGrantNumber" runat="server" TextMode="SingleLine" placeholder="Grant Number" AutoCompleteType="None" class="form-control"></asp:TextBox>
<%--<asp:RequiredFieldValidator Display="Dynamic" ID="rfStateCommGrantNumber" Text="Required" SetFocusOnError="true" CssClass="text-danger" ControlToValidate="txtStateCommGrantNumber" runat="server"></asp:RequiredFieldValidator>--%>
<asp:CustomValidator ID="grants" runat="server" OnServerValidate="ServerValidation" OnClientValidate="Validate_textboxes" ControlToValidate="txtGrantNumber" ErrorMessage="One of the two is required" ValidateEmptyText="true"></asp:CustomValidator>
</div>
客戶端代碼:
<script type="text/javascript">
(function Validate_textboxes(sender, args) {
var v = document.getElementById('<%=txtStateCommGrantNumber.ClientID%>').value;
var v = document.getElementById('<%=txtGrantNumber.ClientID%>').value;
if (v == '') {
args.IsValid = false;
}
else {
}
});
服務器代碼:
protected void ServerValidation(object source, ServerValidateEventArgs args)
{
args.IsValid = txtStateCommGrantNumber.Text.Trim().Length > 0 || txtGrantNumber.Text.Trim().Length > 0;
if (!args.IsValid)
{
CustomValidator customvalidator = new CustomValidator();
customvalidator.IsValid = false;
customvalidator.ErrorMessage = "TextBox1 and TexBox2 can't both be empty";
Page.Form.Controls.Add(customvalidator);
}
}
您必須使用CustomValidator
控件的ClientValidationFunction
屬性。 在javascript函數中,您必須將args.IsValid
屬性設置為true或false。 例如:
<asp:Textbox id="text1" runat="server" text=""></asp:Textbox>
<asp:Textbox id="text2" runat="server" text=""></asp:Textbox>
<asp:CustomValidator id="CustomValidator1" runat="server"
ControlToValidate = "text1"
ErrorMessage = "Required"
ClientValidationFunction="validate" >
</asp:CustomValidator>
和Javascript:
<script type="text/javascript">
function validate(oSrc, args){
var v1 = document.getElementById('<%=text1.ClientID%>').value;
var v2 = document.getElementById('<%=text2.ClientID%>').value;
if (v1 == '' && v2 == '') {
args.IsValid = false;
}
else {
args.IsValid = true;
}
}
</script>
編輯:如果文本框為空,則可能不會觸發驗證事件。 要解決此問題,您可以將ValidateEmptyText="true"
屬性添加到自定義驗證程序,或者可以使用單獨的必填字段驗證程序來驗證空值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.