Доступ к элементу управления asp: скрытое поле в JavaScript - PullRequest
5 голосов
/ 31 октября 2008

Каков наилучший способ доступа к элементу управления 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: hidden на метку asp: и получаю «неопределенное» при отображении переменной HiddenValue в окне предупреждения. Как бы я решил это.

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

Ответы [ 6 ]

5 голосов
/ 31 октября 2008

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

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

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

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

3 голосов
/ 31 октября 2008

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

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

2 голосов
/ 15 июня 2012

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

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>
1 голос
/ 31 октября 2008

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

1 голос
/ 31 октября 2008

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

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

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

0 голосов
/ 31 октября 2008

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

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