2017-05-25 65 views
2

多多包涵,第一次与用户控件,这是一个大的应用程序,我继承了...传递参数到用户控件从母版页

我有一个母版页的用户控件。这样可行。除了一个有条件的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

您是否重新编译该项目或在进行更改后在浏览器中重新加载页面? – Maxx

+0

@Maxx重新编译 –

回答

2

将参数传递到用户控件,而不是依赖于ID露出用于该用户控件的新属性为这样:

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