【问题标题】:How can I hide/show a html element from a C# function?如何隐藏/显示 C# 函数中的 html 元素?
【发布时间】:2020-02-02 15:07:18
【问题描述】:

我正在尝试在 C# 函数中切换显示/隐藏 html 元素。

我根据之前回答的问题尝试过的事情:

  • 通过后面的代码调用html元素的id

  • 使用 Page.ClientScript.RegisterStartupScript 从后面的代码调用 J-query 函数。

  • 同上,但使用:ScriptManager.RegisterStartupScript(this.GetType(), this.GetType(), "script", "HideMonthSelector();", true);

C#函数

Namespace NamespaceName.Geotext
{
    public class ClassName
    {
       private void FunctionName(int objectUid, int ddsUid, string month, string year, bool toggle)
       {
        Default CodeBehind = new Default();
        CodeBehind.HideMonthSelector();
       }
    }
}

代码背后

Namespace NamespaceName
{
    public partial class Default : System.Web.UI.Page
    {


        public string VersionNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();

        protected void Page_Load(object sender, EventArgs e)
        {
            Page.Header.DataBind();

            HtmlHead head = Page.Header;

            foreach (Control child in head.Controls)
            {
                if (child is HtmlLink)
                {
                    ((HtmlLink)child).Href += "?" + VersionNumber;
                }
            }
        }
        public void HideMonthSelector()
        {
            ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "script", "HideMonthSelector();", true);
        }
    }  
}

Default.aspx

<li runat="server" id="selectMonth" class="dropdown"><a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-calendar" aria-hidden="true"></i> Select Month
</a>
<ul class="dropdown-menu" id ="navDropCalendar"></ul>                        
</li>  

<script>function HideMonthSelector() { $("#selectMonth").hide();}</script>  
<script>function ShowMonthSelector() { $("#selectMonth").show();}</script>   

编辑:根据 cmets,问题似乎是我正在创建 default.aspx.cs 页面的实例,然后在该实例中调用方法。显然,这意味着 html id 元素未初始化并保持为空。还有什么其他选择?

如果我将 HideMonthSelector 函数更改为静态字段,我可以运行 Default.HideMonthSelector(),但随后该函数中的代码出错(非静态字段需要对象引用)

【问题讨论】:

  • 没有id为monthSelector的html。
  • 从这个问题和您之前的(已删除)问题来看,您似乎正在尝试做一些没有任何意义的事情。特别是CodeBehind = new Default();(其中,令人困惑的名称,Default 是您的默认页面)。这根本不会做任何事情。您为页面创建一个新变量,然后在其上调用一个方法 - 然后......什么?您希望该页面(在变量中)如何/何时呈现/发送给客户端?当 asp.net 呈现页面时,它将创建一个 Default(page) 的 new 实例,并完全忽略管理器中的变量。
  • 也许你可以用语言解释你想要实现的整体目标——不仅仅是“显示函数中的元素”,因为那是(尝试的)解决方案,而不是要求——还要解释为什么你认为在管理器中创建页面的新实例而不是通过 asp.net 管道可以解决您的问题。
  • 您的另一个问题现在已被删除,但它为空的原因是您自己实例化了该类的一个实例defaultClass = new Default()。当 asp.net 通过 asp.net 管道实例化类时,它在关联的 aspx 文件中查找runat=server 控件并启动它们。当您只是创建类的实例时,您只是在查看类本身,而没有运行 asp.net 初始化例程。鉴于此,应该清楚为什么它在您的代码中为 null。
  • @freedomn-m 谢谢,我如何“通过 asp.net 管道”实例化默认类,而不是像我一样创建一个实例?我不确定那是什么意思。至于我想要做什么 - 我有一个从表中返回数据的 C# 函数。如果返回的数据来自“MONTHLY_DATA”列,我想显示用于选择月份的 HTML 下拉元素。如果返回的数据来自“VALUE”列,我想隐藏下拉菜单。就是这样。

标签: javascript c# jquery html asp.net


【解决方案1】:

问题在于您的 javascript 代码

<script>function HideMonthSelector() { $("#monthSelector").hide();}</script>  
<script>function ShowMonthSelector() { $("#monthSelector").show();}</script>

我找不到 ID 为 monthSelector 的任何 html 元素。这就是您的代码不起作用的原因。

【讨论】:

  • 对不起,我把它改成了正确的 id,同样的问题仍然存在。
  • 将您的元素 ID 指定为静态,因为 asp.net 将在您的元素 ID 中附加控件 ID。 &lt;li runat="server" id="selectMonth" class="dropdown" ClientIDMode="static"&gt;
  • 那还是不行。可能是因为为了调用它所在的函数,我正在创建 Default.aspx.cs 页面的一个实例,然后调用该实例(根据上面的 cmets)只是还没有找到替代方案跨度>
猜你喜欢
  • 2017-04-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多