web-dev-qa-db-ja.com

コードビハインドでコントロールIDにアクセスできません

私のaspxページに次のコードがあります。

 <asp:Button runat="server" ID="myButton" Text="hello" />

そしてこれは私の背後にあるコードで:

protected void Page_Load(object sender, EventArgs e)
{ 
    myButton.Text = "bye"; 
}

何らかの理由で、インテリセンスは背後のコードで「myButton」IDを取得しますが、コンパイルすると次のように表示されます

認識できないためビルドできません!

私のページは、マスターページを使用するデフォルトのaspxページであり、ボタンはコンテンツコントロール内にあり、すべてサーバーで正しく実行するように設定されています。このボタンの解決の問題を除いて、ページは正常に実行および表示されます。

何か案は?

19
David

デザイナーファイル(PageName.designer.cs)が少し混乱しています。ページからボタンを削除して、もう一度追加してみます。

30
Matthew Dresser

ボタンがリピーターのようなネーミングコンテナー内にある場合、そのように使用することはできません。代わりに、次のようなことを行う必要があります。

Button myButton = (Button)Container.FindControl("myButton");
myButton.Text = "bye";
10
Joel Coehoorn

同じ問題が発生しました。最初に、designer.csファイルの何が問題かを理解しようとしました。しかし、私のWebフォームマークアップに、デフォルトのWebフォームからのコピー/貼り付けを使用していることに気付いた後、だから問題は、Protectorの1人が言ったように、@ Pageの継承プロパティを必ず確認するように言ったのです。

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="InputValidation._Default" %>
3
Kohen Holms

このケースの簡単な解決策を見つけました。

デザイナーファイルを開いて、UIコントロールに対応する行を追加するだけです。

protected global::System.Web.UI.WebControls.Button myButton;

ここで、myButtonはコントロールのIdです。

3
Developer

今日も同じ問題があり、私の場合の解決策は次のとおりです。

  • 移動:C:\Users\lenovo\AppData\Local\Temp\Temporary ASP.NET Files\
  • Temporary ASP.NET Filesフォルダーを削除します。
2
Vahap Doğan

私は問題が解決したことを知っていますが、同様の問題が発生したときに、Webアプリケーションをc#からVB-に名前空間X /エンド名前空間を追加することで解決しました

2
Lightning3

私は問題に直面し、Designer.csファイルがプロジェクトから除外されました。
プロジェクトに含まれているものをもう一度探してみてください。
幸運を

2
Dr TJ

おひさしぶりですね。 Buuuut今日も同じ問題に直面していたので、遅すぎることはないようです。私にとっては、TextBoxが名前のないフォームの中にあったために起こっていました。次に、IDをフォームに設定し、TextBoxにアクセスすることができます:idForm.idTextBox.ToString()buttonでも同じことが起こると思います。

1
Reginaldo Rigo

誤って同じ(部分)クラスを継承または定義しようとするファイルがないことを確認してください。これらのファイルは、実際にエラーが発生した場所とは完全に無関係である可能性があります。

1
Protector one

私はこの問題に数回遭遇しました。デザイナーのクラス名と背後のコードが一致しない場合があります。また、名前空間が一致しない場合もあります。また、デザイナーページが生成されたメンバー変数を取得しない場合もあります。

Mdresserが述べたように、デザイナファイルを適切に再生成すると、問題が解決する場合があります。最初にaspxページを必ず保存してください。

1
Darthg8r

問題は、ページディレクティブのcodefileが同じ分離コードファイルを指す複数のaspxファイルがある可能性があることです。同じコントロールが同じコードビハインドにリンクされているすべてのaspxファイルに存在するため、コンパイルエラーが発生することを想定しています。

1
Sandip.Nascar

ページタグの下の継承プロパティを変更するだけです

    <% Page inherit = "Project_Name.otherform" 

に変更

    <% Page inherit = "Project_Name.YourForm"

また、form2.aspx.desginer.csでクラス名も変更および修正されていることがわかります。

説明しましょう: 2つのWebフォームtest1.aspxとtest2.aspxがあるとします。 test1.aspxからtest2.aspxにコードの一部をコピーした場合、test2.aspxファイルは<%ページタグを次のように使用します。

    <% Page inherit = "Project_Name.test1"

これは次のようになるはずでした:

    <% Page inherit = "Project_Name.test2"

このため、test2.aspx.designer.csクラス名は、システム生成ファイルであり、コントロールIDを使用できなくなるため、test1.aspx.designer.csと同じ名前に自動的に変更されます。

継承プロパティを修正した後、test2.aspx.designer.csを保存して開いて確認すると、クラス名も変更されていることがわかります。それは次のようになります:

    public partial class test1
    {
     ...

に変更されました

    public partial class test2
    {
    ... 

後でありがとう;)

0
Mohammad Abraq

つのファイルすべての名前空間を確認します。場合によっては、designer.csファイルの名前空間名と他の2つのファイルの間に不一致があることがあります。名前空間名が3つのファイルすべてで一致していることを確認してください

0
netfed