1

私が取り組んでいる古い ASP.NET プロジェクトでは、ボタン付きのユーザー コントロールがあります...

<%@ Control language="C#" AutoEventWireup="True" Codebehind="MyControl.ascx.cs" Inherits="MyNamespace.MyControl" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>

<!-- SNIP: Unrelated HTML tags... -->
<asp:button id="btSubmit" OnClick="btSubmit_Click" runat="server" style="FONT-WEIGHT: bold; COLOR: black" tabIndex="32" Text="View"></asp:button>

.NET 4.0 にアップグレードしてから、どのプラットフォームでこれを実行しようとしても、次のエラーが発生します。

コンパイラ エラー メッセージ: CS1061: 'ASP.MyControl_ascx' には 'btSubmit_Click' の定義が含まれておらず、タイプ 'ASP.MyControl_ascx' の最初の引数を受け入れる拡張メソッド 'btSubmit_Click' が見つかりませんでした (using ディレクティブまたはアセンブリ参照?)

...まだコードビハインドで:

// Class is defined as a partial, between MyControl.ascx.cs and MyControl.designer.ascx.cs
public class MyControl : UserControl
{
    // This is defined in the designer code...
    protected Button btSubmit;

    // This is defined in the main code behind...but it IS defined.
    protected void btSubmit_Click(object sender, EventArgs e)
    {
        // SNIP: Functionality that works.
    }
}

この問題を解決するために、次のことを試しました。

  1. マークアップが有効であることの確認
  2. C# コードにコンパイル エラーがないことを確認します。
  3. コントロールの Razor タグを再確認して、それautoeventwireupが true でありCodebehindInherits適切に設定されていることを確認します。
  4. ボタン コントロールがボタン クリック イベントと衝突していないことを確認しました。
  5. 提案に従って、デザイン モードでボタンをクリック イベントに再度関連付けました。

また、この Web プロジェクトは、TeamCity を介して Web サーバーにデプロイされています。これは、Visual Studio を使用してローカルで実行すると正しく機能しますが、サーバーでは失敗します。

質問:このコンパイラ エラーの原因は何ですか? このコードは正しく見えます。私はそれに欠陥を検出できません。

4

2 に答える 2

1

コード ビハインド クラスを部分として宣言し、ボタンの宣言を削除する必要があります。これは、ビジュアル スタジオでもいくつかのコードが生成されるためです。

namespace MyNamespace
{
    public partial class MyControl : UserControl
    {
        protected void btSubmit_Click(object sender, EventArgs e) { ... }
    }
}

それでもうまくいかない場合は、新しい UserControl を作成し、クラスと HTML 内のコードをコピーして貼り付けます。

于 2013-08-28T21:09:52.300 に答える