1

私は 3 つの .NET プロジェクトを持っています。

これらのプロジェクトの 1 つは、Index という名前の ASP.Net Web フォーム アプリケーションです。その他のプロジェクトは Index.Database Project が Database Layer Index.Platform Project が Business layer です。

ビジネス層では、UserControls をロードしています。これらの UserControls に関する情報が db にあります。(パス、ascx ファイル、名前、タイトル、コンテンツ、位置など)

ビジネスレイヤーで、ModuleControlという名前のUserControlから駆動されるクラスを作成しました。

System.Web.dll によって参照される Index.Platform も、Using System.Web.UI.WebControls を使用します。

ロードした UserControls でこの ModuleControl フィールドを使用する予定です。Default.aspx の Load_Page イベントでインスタンス化された IndexSite という名前の別のクラスがあります。

namespace Index.Platform.Modules
{
    public class ModuleControl : System.Web.UI.UserControl
    {
        public string Title { get; set; }

        public bool ShowTitle { get; set; }

        public string Content { get; set; }

        public ModuleControl()
        {

        }
    }
}

//Index.Platform.IndexSite

private void InitializeModules(System.Web.UI.Page page)
        {
            string mPath = null;

            try
            {
                ModuleDictionaryList = DBFactory.LoadModules();

                PositionList = DBFactory.PositionList;
                ModuleList = DBFactory.ModuleList;

                foreach (KeyValuePair<string, List<module>> pair in ModuleDictionaryList)
                {
                    foreach (var item in pair.Value)
                    {
                        mPath = "/Modules/" + item.Name + "/" + item.Name + ".ascx";

                        iControl = (ModuleControl)page.LoadControl(mPath);

                        ShowTitle = Convert.ToBoolean(item.ShowTitle);

                        iControl.ShowTitle = ShowTitle;
                        iControl.Title = item.Title;
                        iControl.Content = item.Content;

                        panel = (PlaceHolder)page.Master.FindControl(item.Position);
                        panel.Controls.Add(iControl);

                        //HttpContext.Current.Response.Write(item.Position + "<br>");
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

this class takes an argument from Default.aspx. Page sends its self.

        protected void Page_Load(object sender, EventArgs e)
        {
            IndexSite site = IndexSite.Instance.Create(this);
        }

はい、Bussines レイヤーでは、LoadControl メソッドを使用して USerControl をロードし、これらのコントロールを MasterPage (PlaceHolder) にあるパネル コントロールに追加します。

私の問題は次の行にあります: iControl = (ModuleControl)page.LoadControl(mPath);

UserControl を ModuleControl にキャストできません。UserControl から駆動されたこの ModuleControl と、ModuleControl クラスから駆動されたすべての ascx ファイルを思い出してください。

次のエラーをスローします:「'ASP.modules_mod_login_mod_login_ascx' 型のオブジェクトを 'Index.Platform.Modules.ModuleControl' 型にキャストできません。」

これらのプロセスをメイン アプリケーションで実行すると、ModuleControl をキャストしてもエラーは発生しません。

ID がアプリケーションを 3 に分けるとき、ここで立ち往生しました。

4

0 に答える 0