从Master页面

时间:2017-05-25 19:04:19

标签: c# asp.net user-controls

忍受我,第一次使用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”的标记,所以我假设这个值实际上是在其他地方完全设置的,当我们到达时,标记值是无关紧要的代码隐藏。

我是否完全偏离了我如何试图解决这个问题?

1 个答案:

答案 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耦合也不是一个好主意。