在JavaScript中访问asp:hiddenfield控件

时间:2008-10-31 00:14:36

标签: asp.net javascript

通过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:标签替换了asp:hiddenfield,当我在警告框中显示HiddenValue变量时,我得到一个“未定义”。我该如何解决这个问题。

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

6 个答案:

答案 0 :(得分:5)

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

  1. 不要使用占位符,从场景判断,除了需要在服务器端动态添加控件之外,您不需要占位符。使用div,不使用runat = server。您始终可以使用css控制该div的可见性。
  2. 如果您需要稍后动态添加控件,请使用占位符,但不要设置visible = false。占位符无论如何都不会显示任何显示,使用css设置该占位符的可见性。以下是编程方式:

    placeholderId.Attributes [“style”] =“display:none”;

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

答案 1 :(得分:3)

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

时,您的代码应该有效

摆脱占位符,在搜索填充之后,首先将隐藏字段留空。

答案 2 :(得分:2)

试试这个:

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>

答案 3 :(得分:1)

如果占位符可见性设置为false,则永远不会呈现它,隐藏的字段值将仅存储在页面的ViewState中。

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

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

答案 4 :(得分:1)

将样式更改为“display:none;”而不是“.visible = false”。这将使你的控制变得无形。

答案 5 :(得分:0)

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