Как лучше всего получить доступ к элементу управления 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.
Я устанавливаю его на стороне сервера, потому что скрытое поле отображается, когда пользователь выбирает элемент из набора результатов поиска.
Скрытое поле по определению скрыто. Если вам нужно показать значение скрытого поля, используйте другие элементы управления, такие как TextBox или Label.





Если для параметра Visibility установлено значение false на стороне сервера, заполнитель не будет отображаться, и вы не сможете получить доступ к чему-либо внутри него из JavaScript. Ваш код должен работать, когда заполнитель отображается = "true"
Избавьтесь от заполнителя, сначала оставьте скрытое поле пустым, после того как поиск заполнит его.
Насколько я понимаю, если вы установите controls.Visible = false во время начальной загрузки страницы, он не будет отображаться в ответе клиента. Я предлагаю решить вашу проблему
Если позже вам нужно динамически добавить элементы управления, используйте заполнитель, но не устанавливайте visible = false. Заполнитель все равно не будет отображаться, установите видимость этого заполнителя с помощью css. Вот как это сделать программно:
placeholderId.Attributes ["style"] = "display: none";
В любом случае, как заявляли другие, ваши проблемы возникают из-за того, что после установки control.visible = false он не отображается в ответе клиента.
Какое значение я бы использовал для удаления дисплея: none; стиль из заполнителя?
placeholderId.Attribues ["style"] = "display: block"; ? или просто "display:" будет работать.
Если для видимости заполнителя установлено значение false, оно никогда не будет отображаться, а значение скрытого поля будет сохранено только в ViewState страницы.
только один вопрос, почему вы устанавливаете видимость заполнителя как false, если он содержит скрытое поле?
В любом случае один из возможных способов решения этой проблемы - это добавить объект TextBox или Label и установить для него стиль CSS отображения на «none», а затем скопировать в свой код все, что вы помещаете в скрытое поле, в текст текстового поля / метки. свойство, таким образом вы можете легко прочитать значение с помощью javascript, поскольку текстовое поле / метка будет отображаться, но не будет отображаться для других, хотя это может быть небезопасно.
это фрагмент кода, который помещается в пользовательский элемент управления поиском. Когда пользователь выбирает элемент из результатов поиска, он отображает заполнители и устанавливает для скрытого поля выбранное значение.
Видимый на самом деле не делает его видимым, вы можете оставить его по умолчанию. Просто запуститеat = "server" и используйте его .Value.
Вместо того, чтобы делать «.visible = false», измените стиль на «display: none;». Это сделает ваш контроль невидимым.
ему это тоже не нужно, это скрытое поле, ничего не отображается
Что ж, вместо того, чтобы говорить: «Извините, это невозможно», я пытаюсь предложить ему решение. Почему бы вам не попробовать это вместо того, чтобы голосовать против.
Я действительно мог изменить его на другой элемент управления. Я просто подумал о скрытом поле в своей первоначальной реализации.
Попробуй это:
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>
Ну, это можно установить с помощью свойства Attributes, но зачем вам это делать на стороне сервера?