我在asp.net中创建了一个菜单控件并将其放入母版页。此菜单控件具有属性ActiveItem,修改后会使菜单中的一个或另一个项目显示为活动状态。
要从子页面控制活动项目,我创建了一个控件,它修改了IMenuContainer接口强制执行的母版页属性,以更新母版页中菜单控件的活动项目。
public class MenuActiveItem : Control
{
public ActiveItemEnum ActiveItem
{
get
{
var masterPage = Page.Master as IMenuContainer;
if (masterPage == null)
return ActiveItemEnum.None;
return masterPage.ActiveItem;
}
set
{
var masterPage = Page.Master as IMenuContainer;
if (masterPage == null)
return;
masterPage.ActiveItem = value;
}
}
}
一切都很完美,我真的很喜欢这个解决方案,但我想,如果我知道如何,我会创建一个具有相同功能而不是自定义控件的自定义指令,因为它只是更有意义。
有人知道怎么做吗?
答案 0 :(得分:2)
您应该可以将其转换为您的Page的自定义属性,您可以在Page指令中设置该属性。
为您的页面创建一个基类,然后像这样更改您的Page指令:
<%@ Page Language="C#" MasterPageFile="~/App.master"
CodeFileBaseClass="BasePage" ActiveItem="myActiveItem" AutoEventWireup="true"
CodeFile="Page1.aspx.cs" Inherits="Page1" %>
您可能必须将属性更改为字符串,然后转换为枚举。但是否则你的代码可以保持不变,并且它不必处于控制之中。