Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如果选中复选框,如何使文本框成为必需的_.net_Asp.net_Validation - Fatal编程技术网

.net 如果选中复选框,如何使文本框成为必需的

.net 如果选中复选框,如何使文本框成为必需的,.net,asp.net,validation,.net,Asp.net,Validation,如果选中复选框,我如何使文本框成为必需的 我想我可以写一个自定义的验证器,但我希望尽可能避免一篇完整的回帖来检查验证。。。我原以为AJAX为这个场景内置了一些东西,但我一直找不到它。我认为直接JavaScript也是一个解决方案,但如果这是最好的方法,我可以先使用它。您可以制作一个自定义验证器,然后将这两个控件包装在UpdatePanel中。这将把它变成一个AJAX调用。这有点浪费,但它可以节省您自己编写JavaScript的时间 另外,如果你和我一样讨厌编写JS,你应该试试jQuery。你需要

如果选中复选框,我如何使文本框成为必需的


我想我可以写一个自定义的验证器,但我希望尽可能避免一篇完整的回帖来检查验证。。。我原以为AJAX为这个场景内置了一些东西,但我一直找不到它。我认为直接JavaScript也是一个解决方案,但如果这是最好的方法,我可以先使用它。

您可以制作一个自定义验证器,然后将这两个控件包装在UpdatePanel中。这将把它变成一个AJAX调用。这有点浪费,但它可以节省您自己编写JavaScript的时间


另外,如果你和我一样讨厌编写JS,你应该试试jQuery。

你需要在当前使用的任何验证例程中检查它,包括客户端和服务器端。

已经有一个customvalidator validator控件,它可以启动客户端javascript方法来评估值,或服务器端方法来比较这些值

这有一个例子: 此处解释了客户财产: 此处的服务器事件:

您可以输入代码以交叉引用复选框值


HTH.

处理此问题的JavaScript并不十分困难

给定以下ASP控件:

<asp:TextBox ID="txtSubject" runat="server" />
<asp:CheckBox ID="chkSubjectRequired" runat="server" OnClick="updateValidator();" />
<asp:RequiredFieldValidator ID="rfvSubject" ControlToValidate="txtSubject" ErrorMessage="You must enter a subject." runat="server" />

要在ASP.Net中解决所有这些问题,请使复选框执行回发:

<asp:CheckBox 
     ID="Existing" 
     runat="server" 
     Text="Conditional ValidatorVal" 
     AutoPostBack="True" 
     OnCheckedChanged="Existing_CheckedChanged"
 />

您必须使用CustomValidator并在复选框和文本框中使用clientMode=“Static”

<asp:TextBox ID="txtSubject" ClientIDMode="Static" runat="server" />
<asp:CheckBox ID="chkSubjectRequired" ClientIDMode="Static" runat="server" />
<asp:CustomValidator ID="valid1" runat="server" 
           ClientValidationFunction="validateCheckboxCheck" 
           ErrorMessage="You must write anything.">
</asp:CustomValidator>

并在下面写下函数的脚本标记(需要jQuery)


函数validateCheckboxCheck(源,参数){
如果($(“#chkSubjectRequired”)。为(“:选中”)){
if($(“#txtSubject”).val(){
//返回错误消息的false
args.IsValid=false;
}否则{
//返回真值
args.IsValid=true;
}
}否则{
//返回真值
args.IsValid=true;
}
}

太棒了,非常感谢……尽管查看您的asp代码,但即使未选中复选框,也不需要txtSubject吗?你的意思是禁用验证器…然后让javascript启用它吗?所有提供的代码都没有经过测试。是啊,看来我倒过来了。我已经修改了我的答案。event.src元素上的
status
属性不应该被
选中吗?@Rory-status和checked都有效。坦白地说,我的整个答案太以IE为中心,对任何人都没有多大用处,现在每个人都在使用jQuery,这是我两年前还没有发现的。。。
<asp:CheckBox 
     ID="Existing" 
     runat="server" 
     Text="Conditional ValidatorVal" 
     AutoPostBack="True" 
     OnCheckedChanged="Existing_CheckedChanged"
 />
protected void Existing_CheckedChanged(object sender, EventArgs e)
{
     RequiredFieldValidator1.Enabled =! Existing.Checked;
}
<asp:TextBox ID="txtSubject" ClientIDMode="Static" runat="server" />
<asp:CheckBox ID="chkSubjectRequired" ClientIDMode="Static" runat="server" />
<asp:CustomValidator ID="valid1" runat="server" 
           ClientValidationFunction="validateCheckboxCheck" 
           ErrorMessage="You must write anything.">
</asp:CustomValidator>
<script type="text/javascript">
function validateCheckboxCheck(source, args) {
            if ($("#chkSubjectRequired").is(":checked")) {
                if ($("#txtSubject").val()==="") {
                    // return false for error message
                    args.IsValid = false;
                } else {
                    // return true
                    args.IsValid = true;
                }
            } else {
                // return true
                args.IsValid = true;
            }
        }
</script>