我的母版页中有一些控件,我想从相关的c#clas中访问它们。
例如我有:
<asp:DropDownList ID="ddlSearch" runat="server"
onselectedindexchanged="ddlSearch_SelectedIndexChanged"
AutoPostBack="True">
</asp:DropDownList>
我可以在编写代码时访问它,因此“它看到它的属性正常”。
但是在运行时我收到了
对象引用未设置为对象的实例。
你知道为什么吗?
我也试图找到它:
ContentPlaceHolder mpContentPlaceHolder =
(ContentPlaceHolder)this.FindControl("ContentHead");
if (mpContentPlaceHolder != null)
{
DropDownList ddlSearch =
(DropDownList)mpContentPlaceHolder.FindControl("ddlSearch");
if (!Page.IsPostBack)
utils.fillDDLSearch(ddlSearch);
}
但它也给了null ....这真的很奇怪......
我尝试了另一个对象(一个asp图像控件,但完全相同的问题。 所有它都可以在编译时编译,但在运行时给出null但是它正确地找到了内容占位符。
有人知道这个问题吗?
错误:
对象引用未设置为对象的实例。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
答案 0 :(得分:0)
您需要做的是强力键入页面与母版页之间的关联。在Page ascx中将此行添加到顶部:
&lt;%@ MasterType VirtualPath =“〜/ MasterPage.master”%&gt;
〜/ MasterPage.master是您实际母版页的引用。
然后在您的页面中,您可以使用以下方式访问任何控件,属性等:
Master。[PropertyNameHere]减去'[]'。
有关详细信息,请参阅this。
答案 1 :(得分:0)
我决定将这些组件放在用户控件中并处理其中的行为。 并将用户控件放在母版页中。
然而问题仍然不明确: - 为什么主页中的控件不能直接从masterpage.cs中加入......?