忍受我,第一次使用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耦合不是一个好主意。

10-05 20:32
查看更多