私の質問は、default.aspxにあるサーバーコントロール(リストボックス)にアクセスすることです。app_codeクラスからサーバーコントロールにアクセス
Functions.csでこのコントロールにアクセスしたいとします(このクラスはApp_Codeフォルダにあります)。
マイページ構造は次のとおりです。
- 1マスターページと1コンテンツホルダー
- Default.aspxを(すべてのコントロールがコンテンツプレースホルダ内にある)
- Functions.cs(にApp_Codeにあります)
リストボックス要素を埋めるときに、"オブジェクト参照がオブジェクトのインスタンスに設定されていません"というエラーが表示されます。
私はこのコントロールにアクセスしようとしました:(このコードはApp_CodeのFunctions.csにあります)。 これは、基本的に
private static string file = HttpContext.Current.Server.MapPath("~/App_Data/Questions.xml");
public static void ListItems()
{
XmlDocument XMLDoc = new XmlDocument();
XMLDoc.Load(file);
XPathNavigator nav = XMLDoc.CreateNavigator();
XPathExpression expr;
expr = nav.Compile("/root/file/naam");
XPathNodeIterator iterator = nav.Select(expr);
//ATTEMPT to get access to ServerControl(listbox)
Page page = (Page)HttpContext.Current.Handler;
ListBox test = (ListBox)page.FindControl("lbTest"); //control is called lbTest in Default.aspx
test.Items.Clear();
while (iterator.MoveNext())
{
test.Items.Add(iterator.Current.Value);
}
}
コードdefault.apxファイル
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterFile.master" AutoEventWireup="true" CodeFile="default.aspx.cs" Inherits="default" Debug="true" %>
<%@ MasterType TypeName="Master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="cphContent" Runat="Server" >
<asp:MultiView ID="mvTest" runat="server" >
<asp:View ID="vCollection" runat="server">
<asp:ListBox ID="lbTest" runat="server" CssClass="listbox" ></asp:ListBox>
</asp:View>
</asp:MultiView>
</asp:Content>
マスターファイル自体だけ1つのプレースホルダを有しているからXMLファイルに配置されているリストボックス内のいくつかの項目を示しています。
それから私は、ネストされたコントロールを検索しません
protected void Page_Load(object sender, EventArgs e)
{
Functions.ListItems();
}
恐ろしいデザインです。 – SLaks