忍受我,第一次使用UserControls,这是我继承的一个大型应用程序...
我在母版页中有一个用户控件。这样可行。我需要重用其中的99%,除非有一个条件CSS类。我的想法是取消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 "";
}
。主:
<slc:MyUsercontrol runat="server" ID="FirstId" />
... stuff
<slc:MyUsercontrol runat="server" ID="SecondId" />
这里发生了两件事。
首先,在我的代码后面有一个用于用户控件的断点,它只中断一次,我希望它能断两次。
其次,后面代码中的
ID
不是传递给页面的“ ID”。如果我将“ FirstId”更改为“ Slamalamadingdong”,则当它达到断点时,该代码在后面的代码中仍为“ FirstId”。请注意,当我继承项目时设置了“ FirstId”,我在标记中添加了“ SecondId”,因此我假设这个值实际上是在其他地方完全设置的,而当我们到达后面的代码时,标记值是无关紧要的。
我在尝试实现此目标方面是否完全脱离基础?
最佳答案
要将参数传递给UserControl,而不是依赖ID
公开UserControl的新属性,如下所示:
.ascx.cx:
public string MyClass { get; set; }
.ascx:
<div class="<%= MyClass %>">Changes colors!</div>
。主:
<slc:MyUsercontrol runat="server" ID="FirstId" MyClass="first-class" />
<slc:MyUsercontrol runat="server" ID="SecondId" MyClass="second-class" />
这是一种更为通用的方法,因为您可以简单地添加具有其自身行为的其他
MyUsercontrol
元素,而无需更改MyUsercontrol
的逻辑。另外,将UserControl逻辑与来自其父级的ID
耦合不是一个好主意。