我有一个只有一个<div id="newsListDiv" runat="server"></div>
元素的可视 Web 部件(使用“添加新项目”表单中的标准 Visual Stuido 2012 模板创建)。我想使用以下代码以编程方式向其中添加我自己的用户控件:
protected void Page_Load(object sender, EventArgs e)
{
NewsLine newsLine = Page.LoadControl(@"~/_ControlTemplates/MainTheme/NewsLine.ascx") as NewsLine;
newsListDiv.Controls.Add(newsLine);
}
但是,当我部署解决方案并将 Web 部件添加到页面时,它会显示一个错误页面,告诉我文件“/_ControlTemplates/MainTheme/NewsLine.ascx”不存在。但是,如果我查看文件夹“C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATE\CONTROLTEMPLATES\MainTheme”,我可以看到该文件存在于那里。我尝试将信任级别设置为“完全”,但遇到了同样的错误。我还尝试在 .ascx 文件中添加用户控件,如下所示:
<%@ Register Src="~/_controltemplates/MainTheme/NewsLine.ascx" TagPrefix="uc1" TagName="NewsLine" %>
<div id="newsListDiv" runat="server">
<uc1:NewsLine runat="server" id="NewsLine" />
</div>
这样会出现编译错误:“当前上下文中不存在名称'InitializeControl'”。我还注意到,只要将 Register 或 Reference 行(带有用户控件的路径)添加到我的 .ascx 文件中,.g.cs 文件就会变为空白!当我删除那条线时,它会再次填满。我尝试了许多不同的路径写作,如“../_controltemplates/”、“/controltemplates/15/”等。但它们都没有任何区别。我在这里绝望了,请帮助!