在 Sharepoint 2013 中将用户控件添加到 Web 部件
Posted
技术标签:
【中文标题】在 Sharepoint 2013 中将用户控件添加到 Web 部件【英文标题】:Add user control to web part in Sharepoint 2013 【发布时间】:2012-12-24 16:26:52 【问题描述】:我有一个只有一个 <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/”等。但它们都没有任何区别。我在这里绝望了,请帮助!
【问题讨论】:
【参考方案1】:您忘记再尝试一个选项。访问 _layouts 文件夹时也是如此。您应该指定 15 个配置单元。
正确的路径是“~/_ControlTemplates/15
NewsLine newsLine = Page.LoadControl(@"~/_ControlTemplates/15/MainTheme/NewsLine.ascx")
【讨论】:
也试过了,还是不行。在我看来,自动生成 .g.cs 文件的工具存在一些问题。尝试重新安装VS,但这也无济于事。我决定暂时不使用 UserControls,但我知道它可能不起作用,因为我在 VS 中创建了 ControlTemplates 文件夹而不是映射文件夹。稍后再检查... 这帮助我在 2010->2013 年升级“bla-bla.ascx”文件时找不到问题【参考方案2】:遇到了同样的问题。我没有看到将 15 添加到路径的建议,这对我有用。我的参考文献和你的参考文献之间的唯一区别是我一开始没有 ~。 / 是第一个字符。
【讨论】:
【参考方案3】:我有同样的问题,只有当我在后面的代码中执行它时它才有效,但我没有运气像我使用的任何其他控件一样将它添加到 ascx! - 上帝为什么Sharepoint的一切都如此不同?!!!!
【讨论】:
以上是关于在 Sharepoint 2013 中将用户控件添加到 Web 部件的主要内容,如果未能解决你的问题,请参考以下文章
如何从处理此事件的方法中将单击按钮的 ID 检索到 SharePoint 2013 Web 部件中?