【问题标题】:Access an asp:hiddenfield control in JavaScript在 JavaScript 中访问 asp:hiddenfield 控件
【发布时间】:2008-10-31 00:14:36
【问题描述】:

通过 JavaScript 访问嵌入在 ASP.NET PlaceHolder 控件中的 ASP.NET HiddenField 控件的最佳方法是什么? 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>

编辑: 如何在 C# 后面的 ascx 代码中设置 div 标签的样式?这是来自后面代码的描述:CssStyleCollection HtmlControl.Style

更新: 我用 asp:label 替换了 asp:hiddenfield,当我在警报框中显示 HiddenValue 变量时,我得到一个“未定义”。我将如何解决这个问题。

更新 2: 我继续重构代码,将隐藏字段控件替换为文本框控件并将样式设置为“显示:无;”。我还删除了 JavaScript 函数(它由 CustomValidator 控件使用)并将其替换为 RequiredFieldValidator 控件。

【问题讨论】:

  • 可以使用 Attributes 属性进行设置,但是为什么需要在服务器端进行设置呢?
  • 我将其设置为服务器端,因为当用户从搜索结果集中选择一个项目时会显示隐藏字段。
  • 隐藏字段,顾名思义是隐藏的。如果您需要显示隐藏字段的值,请使用其他控件,例如 TextBox 或 Label

标签: asp.net javascript


【解决方案1】:

我的理解是,如果您在初始页面加载期间设置 controls.Visible = false,它不会在客户端响应中呈现。 我解决您问题的建议是

  1. 不要使用占位符,从场景来看,其实不需要占位符,除非需要在服务器端动态添加控件。使用 div,不带 runat=server。您始终可以使用 css 控制该 div 的可见性。
  2. 如果以后需要动态添加控件,请使用占位符,但不要设置 visible = false。占位符无论如何都不会有任何显示,使用 css 设置该占位符的可见性。以下是如何以编程方式进行操作:

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

无论如何,正如其他人所说,您的问题会出现,因为一旦您设置 control.visible = false,它就不会在客户端响应中呈现。

【讨论】:

  • 我将使用什么值来删除显示:无;占位符的样式?
  • placeholderId.Attribues["style"] = "display:block"; ?或者只是“显示:”会起作用。
【解决方案2】:

如果在服务器端将 Visibility 设置为 false,则不会呈现占位符,并且您将无法从 JavaScript 访问其中的任何内容。当占位符可见时,您的代码应该可以工作=“true”

去掉占位符,先将隐藏字段留空,搜索填充后。

【讨论】:

    【解决方案3】:

    试试这个:

    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>
    

    【讨论】:

      【解决方案4】:

      如果占位符可见性设置为false,则永远不会被渲染,隐藏字段值只会存储在页面的ViewState中。

      只有一个问题,如果占位符包含隐藏字段,为什么要将其可见性设置为 false ?

      无论如何,解决这个问题的一种可能方法是添加一个 TextBox 或 Label 对象,并将其显示 CSS 样式设置为 "none" ,然后在您的代码中将您在隐藏字段中放入的任何内容复制到文本框中/lable 文本属性,这样您可以使用 javascript 轻松读取值,因为文本框/标签将被呈现但对其他人不可见,尽管这可能不是那么安全的事情。

      【讨论】:

      • 这是一个 sn-p 代码,用于搜索用户控件。当用户从搜索结果中选择项目时,它会呈现占位符并将隐藏字段设置为所选值。
      【解决方案5】:

      不要设置“.visible=false”,而是将样式改为“display: none;”。这将呈现您的控件,但使其不可见。

      【讨论】:

      • 他也不需要,它是一个隐藏字段,什么都没有显示
      • 好吧,与其说“对不起,这做不到”,我想给他一个解决方案。你为什么不尝试而不是投票。
      • 我实际上可以将其更改为另一个控件。我只是在最初的实现中想到了一个隐藏字段。
      【解决方案6】:

      Visible 实际上并不使其可见,您可以将其保留为默认值。只需 runat="server" 并使用它的 .Value。

      【讨论】:

        猜你喜欢
        • 2013-10-19
        • 2010-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-27
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        相关资源
        最近更新 更多