Как настроить селектор JQuery для поля HtmlInputHidden-в серверном элементе управления - PullRequest
0 голосов
/ 16 ноября 2011

Я создаю серверный элемент управления с именем DateTimePicker.В этом у меня есть свойство, которое получает / устанавливает формат времени.Я пытался сохранить формат времени в скрытом поле ввода.

public class DateTimePicker : WebControl, INamingContainer
{
    private TextBox _dateTextBox;
    private TextBox _timeTextBox;
    private HtmlInputHidden _timeFormat;
    ...
    public string TimeFormat
    {
        get
        {
            string timeFormat = _timeFormat.Value;
            if(string.IsNullOrEmpty(timeFormat))
            {
                timeFormat = DEFAULT_TIME_FORMAT;
            }
            return timeFormat;
        }
        set
        {
            _timeFormat.Value = value;
        }
    }
    ...
    protected override void CreateChildControls()
    {
        Controls.Clear();

        _dateTextBox = new TextBox();
        _dateTextBox.ID = "DateTextBox";
        _dateTextBox.CssClass = "DatePickerInput";

        _timeTextBox = new TextBox();
        _timeTextBox.ID = "TimeTextBox";
        _timeTextBox.CssClass = "TimePickerInput";
        _timeTextBox.Width = Unit.Pixel(70);

        _timeFormat = new HtmlInputHidden();
        _timeFormat.ID = "TimeFormatInput";

        Controls.Add(_dateTextBox);
        Controls.Add(_timeTextBox);
        Controls.Add(_timeFormat);
    }
    ...

Текстовое поле, содержащее время, расширяется с помощью палитры времени JQuery, например:

$('.TimePickerInput').timePicker({
    step: 60,
    timeFormat: GetTimeFormat()
});


function GetTimeFormat() {
    var timeFormat = $('#TimeFormatInput').val();   //This does not work
    return timeFormat;
    //return 'hh:mm:ss tt';                    //This works
};

Сеттери getter для серверного элемента управления работает, но в селекторе для HtmlInputHidden-field не работает.Как правильно настроить этот селектор?

Редактировать (вот сгенерированный html):

<div> 
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWCgLwj7S1AQLalbH6BQKys6HCBwLLy8GzCQKVnffiAgKC8LSoDgKTgNnOAQKM54rGBgK5ttWBDwLR0LuADBg3bjYl8jVMd+TqBkYL8mvSQmAH" />
</div>
<div>   
    <script type="text/javascript"> 
        //<![CDATA[
        Sys.WebForms.PageRequestManager._initialize('ScriptManager1', document.getElementById('form1'));
      Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tUpdatePanel1'], [], [], 90);
        //]]>
    </script>

    <div id="UpdatePanel1">
    <span id="LoadTimer" style="visibility:hidden;display:none;"></span>
            <span id="FromDateTime"><input name="FromDateTime$DateTextBox" type="text" id="FromDateTime_DateTextBox" class="DatePickerInput" /><input name="FromDateTime$TimeTextBox" type="text" id="FromDateTime_TimeTextBox" class="TimePickerInput" style="width:70px;" /><input name="FromDateTime$TimeFormatInput" type="hidden" id="FromDateTime_TimeFormatInput" /></span>    
            <br />
            <br />
            <span id="ToDateTime"><input name="ToDateTime$DateTextBox" type="text" id="ToDateTime_DateTextBox" class="DatePickerInput" /><input name="ToDateTime$TimeTextBox" type="text" id="ToDateTime_TimeTextBox" class="TimePickerInput" style="width:70px;" /><input name="ToDateTime$TimeFormatInput" type="hidden" id="ToDateTime_TimeFormatInput" /></span>
            <br />
            <br />
            <input type="submit" name="Button1" value="Postback" id="Button1" />
            <br />
            <br />        
            <input type="submit" name="GetDateTimeButton" value="Get Selected DateTime" id="GetDateTimeButton" />
            <input name="SelectedDateTimeTextBox" type="text" id="SelectedDateTimeTextBox" />
        </div>
    </div>

После просмотра исходного кода я протестировал использование var timeFormat = $ ('#FromDateTime_TimeFormatInput ') Val ().Это работает, но часть FromDateTime _ добавляется из идентификатора, используемого для серверного элемента управления.Я должен найти способ получить это, не зная этого.Если на странице более одного поля 'TimeFormatInput', не имеет значения, какое из них я прочитаю, оно будет иметь одинаковое содержимое.

1 Ответ

0 голосов
/ 16 ноября 2011

Поскольку ASP.net, по-видимому, искажает идентификатор, вам нужно использовать $('#FromDateTime_TimeFormatInput') для выбора элемента.

Пожалуйста, не используйте $('[id$="TimeFormatInput"]'), так как он будет очень медленным - он должен повторяться все элементов и затем сравнение подстрок.

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