Как сделать текстовое поле обязательным, если флажок установлен - PullRequest
17 голосов
/ 25 января 2010

Как я могу сделать текстовое поле обязательным, если флажок установлен?

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

Ответы [ 6 ]

20 голосов
/ 25 января 2010

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
3 голосов
/ 24 мая 2013

Чтобы решить все это в 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;
}
2 голосов
/ 25 января 2010

Вы можете создать собственный валидатор, а затем обернуть эти два элемента управления в UpdatePanel. Это превратило бы это в вызов AJAX для вас. Вроде пустая трата времени, но это избавляет вас от необходимости самостоятельно писать JavaScript.

Кроме того, если вы ненавидите писать JS так же, как и я, вы должны попробовать jQuery.

1 голос
/ 25 января 2010

Уже есть элемент управления customvalidator validator, который может запускать метод 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.

0 голосов
/ 10 января 2018

Вы должны использовать 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>
0 голосов
/ 25 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...