【发布时间】:2011-01-09 02:57:57
【问题描述】:
如果选中了复选框,如何使文本框成为必需?
我想我可以编写一个自定义验证器,但我希望避免在可能的情况下回复完整的帖子来检查验证...我认为 AJAX 为这种情况内置了一些东西,但我一直无法做到找到它。我认为直接使用 JavaScript 也是一种解决方案,但如果这是最好的方法,我可以先行一步。
【问题讨论】:
标签: .net asp.net validation
如果选中了复选框,如何使文本框成为必需?
我想我可以编写一个自定义验证器,但我希望避免在可能的情况下回复完整的帖子来检查验证...我认为 AJAX 为这种情况内置了一些东西,但我一直无法做到找到它。我认为直接使用 JavaScript 也是一种解决方案,但如果这是最好的方法,我可以先行一步。
【问题讨论】:
标签: .net asp.net validation
您可以制作一个自定义验证器,然后将这两个控件包装在一个 UpdatePanel 中。这将把它变成你的 AJAX 调用。有点浪费,但它省去了您自己编写 JavaScript 的麻烦。
另外,如果你和我一样讨厌写 JS,你应该试试 jQuery。
【讨论】:
您需要在您当前使用的任何验证例程中检查它,包括客户端和服务器端。
【讨论】:
已经有一个 customvalidator 验证器控件,它可以触发客户端 javascript 方法来评估值,或触发服务器端方法来比较值。
这里有一个例子:http://msdn.microsoft.com/en-us/library/a0z2h4sw%28VS.80%29.aspx 此处解释的客户端属性:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.clientvalidationfunction.aspx 服务器事件在这里:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.customvalidator.servervalidate.aspx
您可以输入代码以交叉引用复选框值。
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" />
添加以下 JavaScript 函数:
<script language="javascript" type="text/javascript">
function updateValidator() {
var enableValidator = !event.srcElement.status;
var rfvSubject = document.getElementById('rfvSubject');
ValidatorEnable(rfvSubject, enableValidator);
}
</script>
仅此而已。您还需要将以下代码添加到您的页面加载事件中,这样如果用户禁用了 JavaScript,您的必填字段验证器仍然可以正确打开或关闭:
rfvSubject.Enabled = chkSubjectRequired.Checked
【讨论】:
status 属性不应该改为checked 吗?
要在 ASP.Net 中解决这一切,请使复选框回发:
<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;
}
【讨论】:
您必须使用 CustomValidator 并在复选框和文本框中使用 ClientIDMode="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)
<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>
【讨论】: