【发布时间】:2013-04-02 09:17:11
【问题描述】:
我有一个引用 2 个用户控件的 MasterPage (MyBoxx.Master):
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MyBoxx.master.cs" Inherits="MyBoxxMaster" %>
<%@ Register TagPrefix="uc1" TagName="Header" Src="Header.ascx" %>
<%@ Register TagPrefix="uc1" TagName="Footer" Src="Footer.ascx" %>
我的用户控件“标题”包含一个搜索框。我想在访问某些页面时隐藏此搜索框。因此,我在我的用户控件中添加了一个布尔属性,并在呈现用户控件时使用该属性来确定是否显示搜索框:
public partial class uxHeader : System.Web.UI.UserControl
{
bool _showSearch = true;
public bool ShowSearch
{
get { return _showSearch; }
set { _showSearch = value; }
}
[...]
protected void Page_Load(object sender, EventArgs e)
{
[...]
searchBox.Visible = _showSearch;
}
}
然后我尝试从内容页面访问此“ShowSearch”属性:
((uxHeader)Page.Master.FindControl("Header1")).ShowSearch = false;
问题是我在尝试编译时收到以下错误:
Error 15 The type or namespace name 'uxHeader' could not be found (are you missing a using directive or an assembly reference?)
问题是我确信我可以在某个时候让它工作和编译,因为它可以在以前发布的生产版本上工作。但是现在我正在对同一站点中的其他内容进行更改,并且无法再编译。
从 SO 上的各种帖子中,我尝试将以下行添加到我的内容页面 aspx 中:
<%@ MasterType VirtualPath="~/MyBoxx.master"%>
<%@ Reference VirtualPath="~/MyBoxx.master" %>
没有任何成功!我还看到了一些关于页面生命周期的答案,但这不是问题,因为我在编译时遇到错误,而不是在执行时出现错误。
如果有人对我如何永久解决此问题有任何建议,我将不胜感激。
谢谢!
【问题讨论】:
-
这部分
(uxHeader)Page.Master.FindControl是在代码隐藏中还是在aspx 文件中?尝试为此类使用完全限定名称 - 会有所帮助吗?您在 Visual Studio 中构建期间或在浏览器中通过 ASP.Net 编译期间是否遇到编译错误?所有类(母版页、页面、控件)是否共享同一个程序集? -
此代码位于代码隐藏中。我在构建过程中遇到编译错误。它们都具有相同的组件。我实际上正在研究一个可能的解决方案,如果我成功了,我当然会发布答案......
-
好的,那你需要
using my.namespace.here;或(my.namespace.here.uxHeader)Page.Master.FindControl -
我会使用配置文件...
标签: c# user-controls master-pages asp.net-2.0