【问题标题】:Want to make the visibility true from client side of the control which made invisible from server side想要使从服务器端不可见的控件的客户端可见性真实
【发布时间】:2011-09-09 00:37:52
【问题描述】:

我在页面中有一个文本框。从服务器端将其可见性设置为 false。现在我想通过使用 java 脚本使其从客户端可见。 (这种情况下不能进行任何回发或部分回发。)

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" runat="server">
        <title>ControlVisibilityClientSide</title>
            <script type="text/javascript">
                function toggleVisibility(controlId)
                {
                    var control = document.getElementById(controlId);
                    if(control.style.visibility == "visible" || control.style.visibility == "")
                        control.style.visibility = "hidden";
                    else
                        control.style.visibility = "visible";
                }
            </script>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                <input type="button" ID="btnShowHide" value="Show/Hide" onclick="toggleVisibility('TextBox1');" />
            </div>
        </form>
    </body>
</html>

这工作正常。

但是当我使用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        TextBox1.Visible = false;
    }
}

上面的代码根本不起作用。

谁能帮我解决这个问题,或者任何建议将不胜感激。

【问题讨论】:

    标签: c# javascript asp.net html css


    【解决方案1】:

    在服务器端设置style["visibility"] = "hidden"。 IE。在 c#btnSave.style["visibility"] = "hidden"; 它将渲染按钮,因此在客户端可以访问此元素。 在客户端将可见性样式更改为可见。

    $('#btnSave).css("visibility", "visible");
    

    【讨论】:

      【解决方案2】:

      如果您设置控件visible=false,它将不会在客户端呈现,但是有一个棘手的解决方案,它会完成同样的事情。

      在您设置Visible=false的页面加载中,您可以将style设置为display:none

      protected void Page_Load(object sender, EventArgs e)
      {
         TextBox1.Attributes.Add("style", "display:none");
      }
      

      它将在客户端呈现控件,但用户看不到,然后您可以在Javascript函数中看到该控件以设置style Diplay:block,LIKE...

      document.getElementById('<%=TextBox2.ClientID %>').style.display = 'block';
      

      【讨论】:

      • 感谢您的回答,但同样的问题仍然存在。不工作。
      • 我已经更新了我的答案。您必须将 DISPLAY = BLOCK 设置为对您的控制可见。
      • @Muhammad Akhtar 是的,当我使用 control.style.display = 'none';或 control.style.display = 'block';然后它正在工作。我仍然没有接受你的回答,因为我想看看“TextBox1.Visible = false;”是否有任何解决方案或不。非常感谢。
      • 这就是我为您提供的可见/不可见替代解决方案。如果你设置控件属性visible = false,那么控件就不会被渲染,那么你怎么能看到那个特定的控件呢。
      • “TextBox1.Visible=false”没有解决方案,因为(根据 VinayC 的回答,您一定已经看到了,因为您在其下添加了评论)它会停止发送控件的 HTML 标记对于客户端,就浏览器和任何客户端 JavaScript 而言,该控件不存在。 Muhammad 的回答为您提供了一种将控件的 HTML 标记包含在页面中的方法,但使用 CSS 来隐藏/显示它。使用 CSS,您可以使用“显示”或“可见性”——出于您的目的,我怀疑“显示”是更好的选择。
      【解决方案3】:

      一旦控件在服务器端被标记为不可见,就不会为其发出任何标记 (html)。所以它不能在 JS 中可见,因为它(对应的 html)在客户端不存在。

      您需要发出启动脚本以在客户端隐藏它,而不是在服务器端隐藏它。

      【讨论】:

      • 感谢您的帮助。做这种事情有什么诀窍吗?因为只有这样的需求。
      猜你喜欢
      • 2015-12-10
      • 2011-04-11
      • 1970-01-01
      • 2018-05-31
      • 2020-10-03
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多