忍受我,第一次使用UserControls,这是我继承的一个很大的应用......
我在母版页中有一个用户控件。这样可行。除非有一个条件css类,否则我需要重用大约99%的内容。我的想法是关闭ID并返回正确的类。
的.ascx:
<div class="<%= GetMyClass() %>">Changes colors!</div>
.ascx.cx:
public string GetMyClass(){
if (ID == "FirstId"){
return "first-class";
}
if (ID == "SecondId"){
return "second-class";
}
return "";
}
的.master:
<slc:MyUsercontrol runat="server" ID="FirstId" />
... stuff
<slc:MyUsercontrol runat="server" ID="SecondId" />
这里发生了两件事。
首先,在我的代码隐藏中有一个断点用于用户控件,它只会断开一次,我希望它会断开两次。
其次,代码隐藏中的ID
不是传递给页面的“ID”。如果我将“FirstId”更改为“Slamalamadingdong”,则当它到达我的断点时,代码隐藏中的值仍然是“FirstId”。
请注意,当我继承项目时设置了“FirstId”,我添加了带有“SecondId”的标记,所以我假设这个值实际上是在其他地方完全设置的,当我们到达时,标记值是无关紧要的代码隐藏。
我是否完全偏离了我如何试图解决这个问题?
答案 0 :(得分:2)
要将参数传递给UserControl,而不是依赖ID
公开UserControl的新属性,如下所示:
.ascx.cx:
public string MyClass { get; set; }
的.ascx:
<div class="<%= MyClass %>">Changes colors!</div>
的.master:
<slc:MyUsercontrol runat="server" ID="FirstId" MyClass="first-class" />
<slc:MyUsercontrol runat="server" ID="SecondId" MyClass="second-class" />
这是一种更通用的方法,因为您可以简单地添加其他MyUsercontrol
元素,但不更改MyUsercontrol
的逻辑。将UserControl逻辑与父母的ID
耦合也不是一个好主意。