【发布时间】: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