C# radiobuttonlist select上需要CustomValidator文本框
在我的页面上,我有一个单选按钮列表和一个文本框 默认情况下,文本框是隐藏的,如果用户单击“是”,则会显示文本框。单击“是”后,必须先填写文本框,然后才能继续 我输入了下面的代码,但是它似乎根本不起作用,当按下按钮进入下一页时,它会继续,而不是停止并要求用户在框中输入内容C# radiobuttonlist select上需要CustomValidator文本框,c#,asp.net,textbox,radiobuttonlist,customvalidator,C#,Asp.net,Textbox,Radiobuttonlist,Customvalidator,在我的页面上,我有一个单选按钮列表和一个文本框 默认情况下,文本框是隐藏的,如果用户单击“是”,则会显示文本框。单击“是”后,必须先填写文本框,然后才能继续 我输入了下面的代码,但是它似乎根本不起作用,当按下按钮进入下一页时,它会继续,而不是停止并要求用户在框中输入内容 function Q12iYes() { document.getElementById('txt12i').style.display = "block" } funct
function Q12iYes() {
document.getElementById('txt12i').style.display = "block"
}
function Q12iNo() {
document.getElementById('txt12i').style.display = "none"
}
<asp:RadioButtonList ID="rbtn12" runat="server" RepeatDirection="Horizontal">
<asp:ListItem Value="Yes" onclick="Q12iYes()" /> <asp:ListItem Value="No" Selected="True" onclick="Q12iNo()" />
</asp:RadioButtonList>
<br />
12.i) If 'Yes' please provide details<br />
<br />
<asp:TextBox ID="txt12i" runat="server" Height="62px" TextMode="MultiLine" Width="343px"></asp:TextBox>
<br />
<asp:CustomValidator ID="MyTxtBoxValidator" runat="server" ControlToValidate="txt12i" ValidateEmptyText="true" ErrorMessage="Please enter some values into Textbox"
ClientValidationFunction="validateMyBtn" Display="Dynamic"> </asp:CustomValidator>
<script type="text/javascript">
function validateMyBtn(oSrc, args) {
var rbtnValue = null;
var rbtnList = document.getElementsByName('<%=rbtn12.ClientID %>');
var radio = rbtnList[0].getElementsByTagName("input");
for (var i = 0; i < radio.length; i++) { if (radio[i].checked) rbtnValue = radio[i].value; }
if (rbtnValue == "Yes") { args.IsValid = !(args.Value == "") }
else { args.IsValid = true; }
}
</script>
<asp:Button ID="btnContinue" runat="server" OnClick="btnContinue_Click" Text="Continue" />
我曾经尝试过如何去做,但我所看到的一切都没有起到任何作用,也没有帮助我理解我的错误所在
有人能帮忙吗?默认情况下,CustomValidator不会验证空文本,因此请设置:
编辑问题在于javascript验证功能只在IE中起作用。以下是一个在其他浏览器中也起作用的版本:
function validateMyBtn(oSrc, args) {
var rbtnList = document.getElementsByName('<%=rbtn12.ClientID %>');
var noClicked = false;
for (var x = 0; x < rbtnList.length; x++) {
if (rbtnList[x].checked) {
noClicked = rbtnList[x].value == "No";
break;
}
}
if (noClicked)
args.IsValid = true;
else
args.IsValid = args.Value.trim().length > 0;
}
@saintsfanuk:忽略了它,因为在这种情况下它很重要,你应该明确地提到它。改变了它,它仍然没有什么区别,所以我认为这不是问题。@saintsfanuk:我已经测试了你的代码,它按预期工作。如果选择“是”,则由于客户端脚本的原因,当文本框为空时,验证程序将阻止回发:如果rbtnValue==Yes{args.IsValid=!args.Value=}。但您没有显示Q12YES和Q12YNO的代码。看来这实际上是一个浏览器问题,我刚刚在Internet Explorer上测试了它,它工作正常,但在Chrome和Firefox上它只是继续到下一页。@saintsfanuk:编辑了我的答案。你的js函数在FF中不起作用。你需要自定义验证器吗?为什么不使用必需的字段验证器?如果输入框不可见,所需的字段验证器将不会尝试验证。从我所有的搜索中,似乎自定义验证器就是我所需要的,因为我使用javascript在用户选择时显示和隐藏文本框。我正在尝试找到最有效的方法。你能使用jQuery吗?
function validateMyBtn(oSrc, args) {
var rbtnList = document.getElementsByName('<%=rbtn12.ClientID %>');
var noClicked = false;
for (var x = 0; x < rbtnList.length; x++) {
if (rbtnList[x].checked) {
noClicked = rbtnList[x].value == "No";
break;
}
}
if (noClicked)
args.IsValid = true;
else
args.IsValid = args.Value.trim().length > 0;
}