2008-10-31 66 views
5

访问通过JavaScript嵌入到ASP.NET PlaceHolder控件中的ASP.NET HiddenField控件的最佳方式是什么? Visible属性在初始页面加载时设置为false,并且可以通过AJAX回调进行更改。在JavaScript中访问asp:hiddenfield控件

这里是我当前的源代码:

<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:hiddenfield有一个asp:标签,我得到一个“不确定”当我在一个警告框显示HiddenValue变量。我将如何解决这个问题。

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

+0

那么它可以使用属性属性设置,但是为什么你需要做的服务器端? – Salamander2007 2008-10-31 00:43:20

+0

我将它设置为服务器端,因为当用户从搜索结果集中选择一个项目时会显示隐藏字段。 – 2008-10-31 00:45:29

+0

隐藏字段,根据定义是隐藏的。如果您需要显示隐藏字段的值,请使用其他控件(如TextBox或Label) – Salamander2007 2008-10-31 00:47:41

回答

5

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

  1. 不要使用占位符,从情况来看,你并不真的需要一个占位符,除非你需要动态地添加服务器端控件。使用div,没有runat = server。您始终可以使用css来控制该div的可见性。
  2. 如果您需要稍后动态添加控件,请使用占位符,但不要设置visible = false。无论如何占位符将不会有任何显示,请使用css设置占位符的可见性。以下是编程方式:

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

不管怎么说,正如其他已经指出,出现你的问题,因为一旦你设置control.visible =假,它不会在客户端的响应呈现。

+0

我将使用什么值来删除显示:无;来自占位符的风格? – 2008-10-31 00:44:21

3

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

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

1

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

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

无论如何,一个可能的方法来解决这个问题,是添加一个TextBox或Label对象,并将其显示CSS样式设置为“none”,然后在您的代码中复制无论您将隐藏字段放入文本框/标签文本属性,这样你可以很容易地阅读使用JavaScript的值,因为文本框/标签将被渲染但其他人不可见,但这可能不是那种安全的事情。

0

可见实际上并未使其可见,您可以将其保留为默认值。只是runat =“服务器”,并使用它的.Value。

1

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

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>