13

要素が1つだけのビジュアルWebパーツ(「新しいアイテムの追加」フォームの標準のVisual Stuido 2012テンプレートで作成)があり<div id="newsListDiv" runat="server"></div>ます。次のコードを使用して、プログラムで独自のユーザーコントロールを追加したいと思います。

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ファイルにRegisterまたはReference行(ユーザーコントロールへのパスを含む)を追加するとすぐに、.g.csファイルが空白になることにも気づきました。そして、その行を削除すると、再びいっぱいになります。「../_controltemplates/」、「/ controltemplates / 15 /」など、さまざまなパスの記述を試しましたが、いずれも違いはありませんでした。私はここで必死になっています、助けてください!

4

3 に答える 3

19

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

正しいパスは「〜/ _ControlTemplates/ 15 」です。

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

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

于 2013-03-26T01:20:18.827 に答える
0

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

于 2014-06-14T11:08:26.873 に答える