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

JQuery скрытое поле

Почему я не могу получить значение этого скрытого поля?

У меня есть элемент управления...

<asp:HiddenField ID="HiddenFieldServerDateTime" runat="server" />

Что изображается как...

<input type="hidden" name="ctl00$cph_main$HiddenFieldServerDateTime" id="ctl00_cph_main_HiddenFieldServerDateTime" value="08/01/2010 10:54:11" 

Что я пытаюсь получить значение использования...

var serverDateTime = $("#HiddenFieldServerDateTime").attr('value');

Итак, что не так?

Я предпочитаю этот

var dateTime = $("[id$=_HiddenFieldServerDateTime]").val();
4b9b3361

Ответ 1

Потому что jQuery ничего не знает о asp:HiddenField. Он выглядит в структуре HTML, где у вас есть <input type="hidden" name="ctl00$cph_main$HiddenFieldServerDateTime" id="ctl00_cph_main_HiddenFieldServerDateTime" .... Таким образом, нет ввода с ID= HiddenFieldServerDateTime. Есть несколько способов преодолеть это:

  • Используйте селектор css:

    <asp:HiddenField ID="HiddenFieldServerDateTime" 
                     runat="server" 
                     CssClass="SomeStyle" />
    

    со следующим селектором: var serverDateTime = $(".SomeStyle").val();

    CssClass не является доступным классом класса HiddenField (и он не имеет Attributes, поэтому вы не можете добавить его вручную).

  • Используйте свойство ClientID:

    var serverDateTime = $("#<%= HiddenFieldServerDateTime.ClientID %>").val();
    
  • Оберните скрытое поле в том, что вы можете выбрать:

    <div class="date-time-wrap">
      <asp:HiddenField ID="..." runat="server" />
    </div>
    

     

    var serverDateTime = $('.date-time-wrap input[type=hidden]').val();
    

Ответ 2

Я знаю, что это уже было ответировано и разрешено, но вот два лучше (на мой взгляд) и более простые альтернативы. Если вы используете .NET4 (или выше), вы можете использовать ClientIDMode = "Static", чтобы заставить ваш идентификатор использоваться в сгенерированном HTML:

<asp:HiddenField ID="HiddenFieldServerDateTime" runat="server" ClientIDMode="Static" />

что означает, что вы можете сделать это в своем JQuery:

var serverDateTime = $('#HiddenFieldServerDateTime').val();

или если вы хотите использовать маршрут класса css, используйте обычный ASP: TextBox (который имеет атрибут CssClass), но просто не отображать его:

<asp:TextBox ID="HiddenFieldServerDateTime" runat="server" style="display:none" CssClass="MyStyle"></asp:TextBox>

который позволяет это сделать:

var serverDateTime = $('.MyStyle').val();

Обратите внимание, что класс css, который вы используете, не должен быть фактически объявлен нигде. Вы можете просто использовать его как маркер.

Ответ 3

Я просто столкнулся с подобной проблемой, и мой ответ состоял в том, чтобы создать новый элемент управления, который наследует от HiddenField и дает ему свойство CssClass:

public class HiddenFieldWithClass : HiddenField
{
    [CssClassProperty]
    [DefaultValue("")]
    public virtual string CssClass 
    {
        get
        {
            string Value = this.ViewState["CssClass"] as string;
            if (Value == null)
                Value = "";
            return Value;
        }
        set
        {
            this.ViewState["CssClass"] = value;
        }
    }

    protected override void Render(HtmlTextWriter writer)
    {
        if (this.CssClass != "")
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass);
        }
        base.Render(writer);
    }
}

Теперь я могу назначить класс моим скрытым полям и использовать значение класса, чтобы найти правильное поле на стороне клиента.

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

Надеюсь, это поможет кому-то еще на этом пути.

Ответ 4

Это также сработает, используя jQuery для выбора всех идентификаторов, заканчивающихся _HiddenFieldServerDateTime.

var myVal = $("[id$='_HiddenFieldServerDateTime']").val();

Ответ 5

<input type="hidden" ID="HiddenFieldServerDateTime" runat="server" class="HiddenFieldServerDateTime" />

Ответ 6

Добавьте атрибут класса ".myHiddenValue" в тег, затем используйте

var myVal = $(".myHiddenValue").val()

так как это будет отображаться после загрузки документа, я советую использовать этот

$(document).ready(function(){
   var myVal = $("input[name='ctl00$cph_main$HiddenFieldServerDateTime']").val();
 }
);

Note: also applies for the first example as well