Событие Button.Click не будет срабатывать при вводе текста в RangeValidator.ControlToValidate - PullRequest
0 голосов
/ 18 ноября 2011

Основываясь на примере из MSDN , я пытаюсь проверить диапазон дат в выделенном коде, используя RangeValidator

Существует три текстовых поля, по одному на дату прибытия, отъездадата и желаемая дата тура.После нажатия кнопки отправки, если пользователь вводит желаемую дату тура за пределами диапазона, указанного в двух других текстовых окнах, должно появиться сообщение RangeValidator.

Минимальные и максимальные значения RangeValidator устанавливаются в событии Click кнопки,Его ControlToValidate (желаемая дата тура) устанавливается в разметке.

Проблема в том, что событие Click кнопки отправки не срабатывает, если в любом из первых двух текстовых полей есть текст.Если текст вводится в любой другой комбинации, событие запускается (хотя, очевидно, генерируется исключение).

Разметка:

Arrival date:
<br />
<asp:TextBox ID="txtArrival" runat="server"></asp:TextBox>
<br />
Departure date:
<br />
<asp:TextBox ID="txtDeparture" runat="server"></asp:TextBox>
<br />
Tour date:
<br />
<asp:TextBox ID="txtTourDate" runat="server"></asp:TextBox>
<br />
<asp:RangeValidator ID="RangeValidator1" runat="server"  ControlToValidate="txtTourDate"></asp:RangeValidator> 
<br />
<asp:Button ID="btnSubmit" runat="server" Text="submit"  onclick="btnSubmit_Click"/>

Кодовый код ::

protected void btnSubmit_Click(object sender, EventArgs e)
{
    RangeValidator1.MinimumValue = txtArrival.Text;
    RangeValidator1.MaximumValue = txtDeparture.Text;
    RangeValidator1.Type = ValidationDataType.Date;

    RangeValidator1.Validate();

    if (!RangeValidator1.IsValid)
    {
        RangeValidator1.ErrorMessage = "The tour date must fall between " + txtArrival.Text + " and " + txtDeparture.Text;
    }
}

Редактировать: Спасибо за ответ, но оказалось, что я не установил атрибут EnableClientScript RangeValidator в "false".Новое правило - я подожду 30 минут, прежде чем снова задавать вопросы:)

Ответы [ 3 ]

2 голосов
/ 18 ноября 2011

Вам необходимо установить минимальное и максимальное значения в свойствах RangeValidators, оно проверяет входные данные и, если нет ошибок, затем включает элементы управления, которые могут затем создавать обратные передачи.

1 голос
/ 18 ноября 2011

Вам необходимо установить свойства RangeValidators min max на стороне клиента.Вы можете вызвать функцию JavaScript OnClientClick кнопки Submit.И вы можете установить минимальное максимальное значение RangeValidator отсюда.Как это:

<asp:Button ID="btnSubmit" runat="server" Text="submit" OnClientClick="return SetProperties();" onclick="btnSubmit_Click"/> 

<script type="text/javascript">
    function SetProperties()
    {
        var r = document.getElementById("RangeValidator1");
        r.MaximumValue = document.getElementById("txtDeparture").value;
        r.MinimumValue = document.getElementById("txtArrival").value;
        r.ControlToValidate = "txtTourDate";
    }
</script>
0 голосов
/ 11 декабря 2013

Hi pls Удалите dipslay = "dynamic" и попробуйте, чтобы ваш код работал должным образом: из-за этого при первом щелчке вызывался код, это происходит в основном, если вы используете управление Panel и Telerik для асинхронного рендеринга

...