Доступ к элементу управления asp: hiddenfield в JavaScript

Как лучше всего получить доступ к элементу управления ASP.NET HiddenField, встроенному в элемент управления ASP.NET PlaceHolder, через JavaScript? Атрибут Visible имеет значение false при начальной загрузке страницы и может быть изменен с помощью обратного вызова AJAX.

Вот мой текущий исходный код:

<script language = "javascript" type = "text/javascript">
    function AccessMyHiddenField()
    {
        var HiddenValue = document.getElementById("<%= MyHiddenField.ClientID %>").value;

        //do my thing thing.....
    }
</script>
<asp:PlaceHolder ID = "MyPlaceHolder" runat = "server" Visible = "false">
    <asp:HiddenField ID = "MyHiddenField" runat = "server" />
</asp:PlaceHolder>

Обновлено: Как установить стиль для тега div в коде ascx в C#? Это описание из кода позади: CssStyleCollection HtmlControl.Style

ОБНОВИТЬ: Я заменил asp: hiddenfield меткой asp: и получаю «undefined», когда отображаю переменную HiddenValue в окне предупреждения. Как бы я решил это.

ОБНОВЛЕНИЕ 2: Я продолжил и реорганизовал код, заменив элемент управления скрытым полем элементом управления текстовым полем и установил стиль на «display: none;». Я также удалил функцию JavaScript (она использовалась элементом управления CustomValidator) и заменил ее элементом управления RequiredFieldValidator.

Ну, это можно установить с помощью свойства Attributes, но зачем вам это делать на стороне сервера?

Salamander2007 31.10.2008 03:43

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

Michael Kniskern 31.10.2008 03:45

Скрытое поле по определению скрыто. Если вам нужно показать значение скрытого поля, используйте другие элементы управления, такие как TextBox или Label.

Salamander2007 31.10.2008 03:47
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
3
34 784
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Если для параметра Visibility установлено значение false на стороне сервера, заполнитель не будет отображаться, и вы не сможете получить доступ к чему-либо внутри него из JavaScript. Ваш код должен работать, когда заполнитель отображается = "true"

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

Ответ принят как подходящий

Насколько я понимаю, если вы установите controls.Visible = false во время начальной загрузки страницы, он не будет отображаться в ответе клиента. Я предлагаю решить вашу проблему

  1. Не используйте заполнитель, судя по сценарию, вам действительно не нужен заполнитель, если вам не нужно динамически добавлять элементы управления на стороне сервера. Используйте div без runat = server. Вы всегда можете контролировать видимость этого div с помощью css.
  2. Если позже вам нужно динамически добавить элементы управления, используйте заполнитель, но не устанавливайте visible = false. Заполнитель все равно не будет отображаться, установите видимость этого заполнителя с помощью css. Вот как это сделать программно:

    placeholderId.Attributes ["style"] = "display: none";

В любом случае, как заявляли другие, ваши проблемы возникают из-за того, что после установки control.visible = false он не отображается в ответе клиента.

Какое значение я бы использовал для удаления дисплея: none; стиль из заполнителя?

Michael Kniskern 31.10.2008 03:44

placeholderId.Attribues ["style"] = "display: block"; ? или просто "display:" будет работать.

goldenratio 31.10.2008 03:54

Если для видимости заполнителя установлено значение false, оно никогда не будет отображаться, а значение скрытого поля будет сохранено только в ViewState страницы.

только один вопрос, почему вы устанавливаете видимость заполнителя как false, если он содержит скрытое поле?

В любом случае один из возможных способов решения этой проблемы - это добавить объект TextBox или Label и установить для него стиль CSS отображения на «none», а затем скопировать в свой код все, что вы помещаете в скрытое поле, в текст текстового поля / метки. свойство, таким образом вы можете легко прочитать значение с помощью javascript, поскольку текстовое поле / метка будет отображаться, но не будет отображаться для других, хотя это может быть небезопасно.

это фрагмент кода, который помещается в пользовательский элемент управления поиском. Когда пользователь выбирает элемент из результатов поиска, он отображает заполнители и устанавливает для скрытого поля выбранное значение.

Michael Kniskern 31.10.2008 03:24

Видимый на самом деле не делает его видимым, вы можете оставить его по умолчанию. Просто запуститеat = "server" и используйте его .Value.

Вместо того, чтобы делать «.visible = false», измените стиль на «display: none;». Это сделает ваш контроль невидимым.

ему это тоже не нужно, это скрытое поле, ничего не отображается

John Sheehan 31.10.2008 03:26

Что ж, вместо того, чтобы говорить: «Извините, это невозможно», я пытаюсь предложить ему решение. Почему бы вам не попробовать это вместо того, чтобы голосовать против.

BoltBait 31.10.2008 03:27

Я действительно мог изменить его на другой элемент управления. Я просто подумал о скрытом поле в своей первоначальной реализации.

Michael Kniskern 31.10.2008 03:28

Попробуй это:

function popup(lid)
{
    var linkid=lid.id.toString();    
    var lengthid=linkid.length-25;    
    var idh=linkid.substring(0,parseInt(lengthid));  
    var hid=idh+"hiddenfield1";

    var gv = document.getElementById("<%=GridViewComplaints.ClientID %>");
    var gvRowCount = gv.rows.length;
    var rwIndex = 1;
    var username=gv.rows[rwIndex].cells[1].childNodes[1].innerHTML;
    var prdid=gv.rows[rwIndex].cells[3].childNodes[1].innerHTML;
    var msg=document.getElementById(hid.toString()).value;
    alert(msg);


    document.getElementById('<%= Labelcmpnme.ClientID %>').innerHTML=username;
    document.getElementById('<%= Labelprdid.ClientID %>').innerHTML=prdid;
    document.getElementById('<%= TextBoxviewmessage.ClientID %>').value=msg;
    return false;
}


<ItemTemplate>
    <asp:LinkButton ID = "LabelComplaintdisplayitem" runat  = "server"   Text='<%#Eval("ComplaintDisp").ToString().Length>5?Eval("ComplaintDisp").ToString().Substring(0,5)+"....":Eval("ComplaintDisp") %>' CommandName  = "viewmessage" CommandArgument ='<%#Eval("username")+";"+Eval("productId")+";"+Eval("ComplaintDisp") %>' class='basic' OnClientClick  = " return popup(this)"></asp:LinkButton>
    <asp:HiddenField ID = "hiddenfield1" runat  = "server" Value='<%#Eval("ComplaintDisp")%>'/>
</ItemTemplate>

Другие вопросы по теме