web-dev-qa-db-ja.com

Sharepoint2013のWebパーツにユーザーコントロールを追加する

<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 /」など、さまざまなパスの記述を試しましたが、どれも違いはありませんでした。私はここで必死になっています、助けてください!

13
4tuneTeller

もう1つのオプションを試すのを忘れました。 _layoutsフォルダーにアクセスする場合も同じです。 15ハイブを指定する必要があります。

正しいパスは「〜/ _ControlTemplates/15

 NewsLine newsLine = Page.LoadControl(@"~/_ControlTemplates/15/MainTheme/NewsLine.ascx") 
19
Rick

私はこれと同じ問題を抱えていますが、コードビハインドでそれを実行した場合にのみ機能しますが、私が使用する他のコントロールのようにascxに追加することはできません! -神なぜSharePointですべてがこれほど異なる必要があるのですか?!!!!

0
Omid S.

同じ問題が発生していました。パスに15を追加する提案を見たことがなかったので、これでうまくいきました。私のリファレンスとあなたのリファレンスの唯一の他の違いは、最初に〜がないことです。 /は最初の文字です。

0
Rich Ross