Подтвердить что ты не робот

ASP.NET - требуется текстовое поле, если флажок установлен

Каков наилучший способ сделать текстовое поле необходимым, если флажок установлен?

Я полагаю, что могу написать специальный валидатор, но я надеялся избежать полного сообщения, чтобы проверить проверку, если это возможно... Я думал, что у AJAX есть что-то встроенное для этого сценария, но я не смог Найди это. Я думаю, что прямой Javascript также будет решением, но я мог бы использовать начало, если это лучший подход.

Спасибо за любую информацию.

4b9b3361

Ответ 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

Вам нужно будет проверить его в любой процедуре проверки, которую вы сейчас используете, как на стороне клиента, так и на стороне сервера.