我有3个.NET项目。
其中一个项目是名为Index的ASP.Net Web表单应用程序。其他项目如下 Index.Database项目是数据库层 Index.Platform Project是Bussiness层。
在商务层即时加载UserControls。 db中有关于这些UserControl的信息。 (路径,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。记住这个ModuleControl来自UserControl,我的所有ascx文件都来自ModuleControl类。
引发此错误:“无法将类型为'ASP.modules_mod_login_mod_login_ascx'的对象强制转换为'Index.Platform.Modules.ModuleControl'。”
如果我在Main应用程序中执行这些过程,则不会出现转换ModuleControl的错误。
当我将我的申请分开到3.我就卡在这里。