<div id="newsListDiv" runat="server"></div>
要素が1つだけのビジュアル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'は現在のコンテキストに存在しません」。また、登録行または参照行(ユーザーコントロールへのパスを含む)を.ascxファイルに追加するとすぐに、.g.csファイルが空白になることにも気づきました。そして、その行を削除すると、再びいっぱいになります。 「../_controltemplates/」、「/ controltemplates/15 /」など、さまざまなパスの記述を試しましたが、どれも違いはありませんでした。私はここで必死になっています、助けてください!
もう1つのオプションを試すのを忘れました。 _layoutsフォルダーにアクセスする場合も同じです。 15ハイブを指定する必要があります。
正しいパスは「〜/ _ControlTemplates/15
NewsLine newsLine = Page.LoadControl(@"~/_ControlTemplates/15/MainTheme/NewsLine.ascx")
私はこれと同じ問題を抱えていますが、コードビハインドでそれを実行した場合にのみ機能しますが、私が使用する他のコントロールのようにascxに追加することはできません! -神なぜSharePointですべてがこれほど異なる必要があるのですか?!!!!
同じ問題が発生していました。パスに15を追加する提案を見たことがなかったので、これでうまくいきました。私のリファレンスとあなたのリファレンスの唯一の他の違いは、最初に〜がないことです。 /は最初の文字です。