[英]ASP.Net c# - How do I instantiate an instance of a WebUserControl from within a App_Code class?
[英]How do I reference an ASP.net MasterPage from App_Code
我正在开发.net 3.5网站,标准网站项目。
我在网站App_Code文件夹(MyPage)中编写了一个自定义页面类。
我还有一个带有属性的母版页。
public partial class MyMaster : System.Web.UI.MasterPage
{
...
private string pageID = "";
public string PageID
{
get { return pageID; }
set { pageID = value; }
}
}
我正在尝试从MyPage中的属性引用此属性。
public class MyPage : System.Web.UI.Page
{
...
public string PageID
{
set
{
((MyMaster)Master).PageID = value;
}
get
{
return ((MyMaster)Master).PageID;
}
}
}
我最终得到“无法找到类型或命名空间名称'MyMaster'。我通过在MyMaster页面上使用FindControl()而不是属性来实现它,但母版页中的ID可能会发生变化。
我倾向于使用网站项目执行以下操作:
在App_Code中创建以下内容:
BaseMaster.cs
using System.Web.UI;
public class BaseMaster : MasterPage
{
public string MyString { get; set; }
}
BasePage.cs:
using System;
using System.Web.UI;
public class BasePage : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (null != Master && Master is BaseMaster)
{
((BaseMaster)Master).MyString = "Some value";
}
}
}
然后我的母版页继承自BaseMaster:
using System;
public partial class Masters_MyMasterPage : BaseMaster
{
protected void Page_Load(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(MyString))
{
// Do something.
}
}
}
我的页面继承自BasePage:
public partial class _Default : BasePage
我找到了一些背景知识,这是因为事物的构建和引用方式。
App_Code中的所有内容都编译成一个程序集。
其余的,aspx文件,代码隐藏,masterpages等,编译成另一个引用App_Code的assemlby。
因此单行道。
也是Ben的解决方案有效的原因。 谢谢Ben。
我现在都清楚了。
我意识到已经有了解决方案,但我偶然发现了这个问题。
最简单的解决方案是Microsoft网站上列出的解决方案( http://msdn.microsoft.com/en-us/library/c8y19k6h.ASPX )
基本上它说,如果你在子页面aspx中包含一个额外的指令,你的代码将按原样运行:
<%@ MasterType VirtualPath="~/MyMaster.Master" %>
然后你可以通过以下方式直接引用基础MyPage中的属性:
public string PageID
{
set
{
Master.PageID = value;
}
get
{
return Master.PageID;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.