ASP.NET - требуется текстовое поле, если флажок установлен
Каков наилучший способ сделать текстовое поле необходимым, если флажок установлен?
Я полагаю, что могу написать специальный валидатор, но я надеялся избежать полного сообщения, чтобы проверить проверку, если это возможно... Я думал, что у AJAX есть что-то встроенное для этого сценария, но я не смог Найди это. Я думаю, что прямой Javascript также будет решением, но я мог бы использовать начало, если это лучший подход.
Спасибо за любую информацию.
Ответы
Ответ 1
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
Ответ 2
Вы можете создать настраиваемый валидатор, а затем обернуть эти два элемента управления в UpdatePanel. Это превратит его в призыв AJAX для вас. Соблюдайте отходы, но это избавляет вас от необходимости писать JavaScript самостоятельно.
Кроме того, если вы ненавидите писать JS столько, сколько я, вы должны попробовать jQuery.
Ответ 3
Уже существует элемент проверки валидатора 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
Вы можете ввести код для перекрестной ссылки на значение флажка.
НТН.
Ответ 4
Чтобы решить все это в 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;
}
Ответ 5
Вы должны использовать 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>
И напишите ниже тег script для функции (require 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>
Ответ 6
Вам нужно будет проверить его в любой процедуре проверки, которую вы сейчас используете, как на стороне клиента, так и на стороне сервера.