我在c#中遇到了事件监听器的问题。 我要做的是存储在
Session["ClickModule"]
当我点击按钮时的变量。
这个变量允许我保持“选中”我的按钮(带有javascript功能的图形选择)。
我需要这个解决方案,因为当用户点击按钮时会重新加载页面,我需要加载正确的设置,比如正确的按钮布局。
因此,当用户单击按钮时,在回发之前我必须将值存储在Session [“ClickModule”]中以在page_load函数中检索它。
Page_Load代码:
if (!IsPostBack)//only for the first load
{
HtmlGenericControl li = new HtmlGenericControl("li");
li.Attributes["class"] = "dropdown";
li.ID = "Module" + row["ModuleID"];
HtmlAnchor a = new HtmlAnchor();
a.HRef = "javascript:showhide('" + row["ModuleID"] + "')";
a.InnerText = row["modtitle"].ToString();
Panel div = new Panel();
div.ID = "subModulesBar" + row["ModuleID"];
div.Attributes["class"] = "subModulesBar";
li.Controls.Add(a);
ModuleContainer.Controls.Add(li);
divcontainer.Controls.Add(div);
module = li;
}
else// for the postback loads
{
HtmlGenericControl li = new HtmlGenericControl("li");
li.ID = "Module" + row["ModuleID"];
Debug.WriteLine("SESSION MODULE = " + Session["PModuleID"].ToString() + " CURRENT MODULE = " + row["ModuleID"].ToString());
if (Session["PModuleID"].ToString() == row["ModuleID"].ToString())
{
Debug.WriteLine("UGUALE SELECTED");
li.Attributes["class"] = "dropdown moduleselected";
}
else
{
Debug.WriteLine("DIVERSO");
li.Attributes["class"] = "dropdown";
}
HtmlAnchor a = new HtmlAnchor();
a.HRef = "javascript:showhide('" + row["ModuleID"] + "')";
a.InnerText = row["modtitle"].ToString();
Panel div = new Panel();
div.ID = "subModulesBar" + row["ModuleID"];
div.Attributes["class"] = "subModulesBar";
li.Controls.Add(a);
ModuleContainer.Controls.Add(li);
divcontainer.Controls.Add(div);
module = li;
}
这是我的JS功能:
function showhide(id) {
var fulldrops = document.getElementsByClassName('subModulesBar');
var lis = document.getElementsByClassName('dropdown');
for (var i = 0; i < fulldrops.length; i++) {
if (fulldrops[i].id == "ContentPlaceHolder1_subModulesBar" + id) {
if (fulldrops[i].style.visibility == "visible") {
fulldrops[i].style.visibility = "hidden";
} else {
fulldrops[i].style.visibility = "visible";
}
} else {
fulldrops[i].style.visibility = "hidden";
}
}
for (var i = 0; i < lis.length; i++) {
if (lis[i].id == "ContentPlaceHolder1_Module" + id) {
if (lis[i].className == "dropdown moduleselected") {
lis[i].className = "dropdown";
lis[i].style.backgroundImage = "url('images/arrowdown.png')";
} else {
lis[i].className = "dropdown moduleselected";
lis[i].style.backgroundImage = "url('images/arrowup.png')";
}
} else {
lis[i].className = "dropdown";
lis[i].style.backgroundImage = "url('images/arrowdown.png')";
}
}
}
它可以简单地修改布局(单击按钮时白色背景和向下箭头,不显示灰色和箭头时)。
我读了很多关于这个论点的帖子。但所有这些都建议在pageload中调用该函数。但我无法遵循这种方式,因为我只有在用户点击按钮时才需要存储我的值。
有人能帮助我吗?