6

問題:
このようなマークアップがあります(重要な行のみ):

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RTDeluxe.ascx.cs"
Inherits="MainSolution.CONTROLTEMPLATES.Kunde.RTDeluxe" %>
<ul id="linkUl" class="teaserLinksUL" runat="server"/>

コードビハインド:

namespace MainSolution.CONTROLTEMPLATES.Kunde
public partial class RTDeluxe : UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        linkUl.InnerHtml = string.Empty;
    }
}

コードビハインドの内部にアクセスでき、ulコンパイルエラーは発生しません。しかし、コードをデバッグすると、がNULLであるNullReferenceExceptionために取得します。linkUl

まず、名前空間が理由だと思いました。しかし、何度か試した後、私はそれらが正しいと確信しています。はFileLocation正しいようcontroltemplatesで、私のiisのフォルダーには、対応するascxファイルを含む「Kunde」フォルダーがあります。

同じ構造の他の.ascxファイルがあります->それらは魅力のように機能しています。

質問:
そのような振る舞いの名前空間以外の理由はありますか?私が見ることができるヒントはありますか?

編集:
RTDeluxe.ascx.designer.csファイルが存在し、生成されたlinkUlものは次のようになります。

protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl;

Edit2:わかりまし
た、私はあなたのすべての質問に答えようとします。お手数をおかけしますが、フィードバックをお寄せいただきありがとうございます。

  1. VisualStudioを再起動しました->問題が解決しません。
  2. また、ソリューションをクリーンアップして、新しいソリューションを展開しました。->問題は解決しません。
  3. コントロール階層をデバッグして確認すると、ラベルがないことがわかります。
  4. IDを変更すると、コンパイラはコードビハインドでエラーをスローします(これは正しいです)。IDを変更すると、2つ前と同じ動作になります。
  5. また、IISとPC全体を再起動しました->変更なし。
  6. Namelinkul-definition->Nochangesに属性を追加しました。
  7. 使用しようとするFindControlとNULLが返されます。
  8. ターゲットフレームワークは.NET3.5です
  9. linkulは、リピーターやその他のコントロールの内部にはありません。
  10. web.configを削除/変更しても、解決策にはなりません。
  11. EnsureChildControlsアクセスする前に追加してlinkUlも何も変わりません。
  12. コードをPage_PreRenderに移動することもできません。

ここに記載されていない提案を試して、すぐに追加します。

Edit3:
ここに完全なマークアップ:

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RTDeluxe.ascx.cs" Inherits="MainSolution.CONTROLTEMPLATES.Kunde.RTDeluxe" %>

<ul id="linkUl" class="teaserLinksUL" runat="server"/>

* Edit4:
わかりました、ここで私が見つけたいくつかの追加情報:マークアップで何かを変更すると、プレーンなhtmlテキストを追加するなど、ブラウザーで認識されないか、ブラウザーに表示されません。私がこのようなことをするとき:

   Label label1 = new Label();
   label1.Text = "hugo lives!";
   Controls.Add(label1);

表示されます。Visual Studioではすべてが問題ないようです...しかし、サーバーでの「ライブ」は、コードビハインドが奇妙な異なるマークアップを示しています...

4

5 に答える 5

1

これはあなたに少し役立つかもしれません:

クラスレベルのユーザーコントロールの分離コードファイルに、次のコードを追加します。

protected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl = new System.Web.UI.HtmlControls.HtmlGenericControl();

ファイルprotected global::System.Web.UI.HtmlControls.HtmlGenericControl linkUl;から削除しますRTDeluxe.ascx.designer.cs

オブジェクトが作成されていないことが宣言されたためである可能性があります。お役に立てれば..

于 2012-01-31T13:22:41.893 に答える
0

EnsureChildControlsコントロールにアクセスしたり、コードをに移動したりする前に、呼び出してみましたOnPreRenderか?

于 2012-01-09T16:18:19.207 に答える
0

以前、.aspxファイルでこれと同様の問題が発生しました。これは、web.configファイルでoptimizeCompilationsがtrueに設定されていることが原因でした。

<system.web>
    <compilation optimizeCompilations="true" />
</system.web>

optimizeCompilationsがtrueに設定されている場合、ASP.Netは必要と思われる場合にのみページを再構築します。混乱して、ページの再構築が必要な変更を加えたことに気付かず、コンパイラがキャッチしない実行時エラーが発生することがあります。この設定の詳細については、http://msdn.microsoft.com/en-us/library/ms366723.aspxを参照してください。

この問題を解決するには、optimizeCompilationsを一時的にfalseに設定し、Webサイトを再構築し、アプリプールをリサイクルしてから、再びtrueに戻す必要がありました。

お役に立てれば。

于 2012-01-09T20:52:11.617 に答える
0

このような状況では、VisualStudioがこのファイルに関して悪い状態になっている可能性があります。ファイルを削除して再作成すると、問題が解決することがよくあります。新しく作成したファイルに貼り付けることができるように、必ずどこかにコードをコピーしてください。

于 2012-01-11T00:45:58.190 に答える
0

Visual Studioの公開機能を使用して展開していますか?その場合は、移行先サーバーの.ascxファイルを削除してみてください。Visual Studioでファイルが変更されたことを認識せず、新しいファイルをコピーしませんでした。

于 2012-01-11T16:42:35.210 に答える