13

我有一个只有一个<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/”等。但它们都没有任何区别。我在这里绝望了,请帮助!

4

3 回答 3

19

您忘记尝试另一种选择。访问 _layouts 文件夹时也是如此。您应该指定 15 个配置单元。

正确的路径是“~/_ControlTemplates/ 15

 NewsLine newsLine = Page.LoadControl(@"~/_ControlTemplates/15/MainTheme/NewsLine.ascx") 
于 2013-01-29T10:46:43.457 回答
0

我有同样的问题,只有当我在后面的代码中执行它时它才有效,但我没有运气将它添加到 ascx 就像我使用的任何其他控件一样!- 上帝为什么Sharepoint的一切都如此不同?!!!!

于 2014-06-14T11:08:26.873 回答
0

遇到了同样的问题。我没有看到将 15 添加到路径的建议,这对我有用。我的参考文献和你的参考文献之间唯一的其他区别是我一开始没有 ~ 。/ 是第一个字符。

于 2013-03-26T01:20:18.827 回答