背後にあるコードのコントロールIDにアクセスできません
-
19-09-2019 - |
質問
ASPXページに次のコードがあります。
<asp:Button runat="server" ID="myButton" Text="hello" />
そしてこれは私のコードの背後にあります:
protected void Page_Load(object sender, EventArgs e)
{
myButton.Text = "bye";
}
何らかの理由で、Intellisenseは背後にあるコードの「MyButton」IDを拾いますが、コンパイルすると書かれています
認識していないため、構築できません!
私のページは、マスターページを使用するデフォルトのASPXページで、ボタンはコンテンツコントロール内にあり、すべてがサーバーで正しく実行されるように設定されており、このボタン解像度の問題を除いてページが実行され、正常に表示されます。
何か案は?
解決
デザイナーファイル(pageName.designer.cs)が少しめちゃくちゃになっているようです。ページからボタンを削除して再度追加してみます。
他のヒント
ボタンがリピーターのような命名容器の中にある場合、そのように使用することはできません。代わりに、あなたは次のようなことをする必要があります:
Button myButton = (Button)Container.FindControl("myButton");
myButton.Text = "bye";
同じ問題に遭遇しましたが、最初にDesigner.csファイルの何が悪いのかを理解しようとしていました。しかし、WebFormマークアップには、デフォルトのWebformからのコピー/貼り付けを使用していることに気付いた後。そのため、プロテクターが言ったように、 @pageの継承プロパティを確認してください。
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="InputValidation._Default" %>
このケースの簡単な解決策を見つけました。
デザイナーファイルを開き、UIコントロールに対応する行を追加するだけです。
protected global::System.Web.UI.WebControls.Button myButton;
どこ MyButton は Id
あなたのコントロールの。
私は問題に直面し、それに気づきました Designer.cs
ファイルは私のプロジェクトから除外されました。
あなたのプロジェクトにもう一度含めることを探してみてください。
幸運を
問題が解決したことはわかっていますが、同様の問題があるとき、C#からVBにWebAplicationを変換したとき、名前空間x / end Namespaceを追加することでこれを解決しました
私は今日も同じ問題を抱えていましたが、私の場合、解決策は次のとおりです。
- 移動:
C:\Users\lenovo\AppData\Local\Temp\Temporary ASP.NET Files\
- 削除します
Temporary ASP.NET Files
フォルダ。
私はこの問題に数回遭遇しました。デザイナーのクラス名とコードの背後にあるClassNameが一致しない場合があります。それ以外の場合は、名前空間が一致していません。また、デザイナーページでは、メンバー変数が生成されないこともあります。
Mdresserが述べたように、デザイナーファイルを非常にうまく再生すると、問題に対処する可能性があります。 ASPXページを最初に保存してください。
誤って同じ(部分的な)クラスを継承または定義しようとするファイルがないことを確認してください。これらのファイルは、エラーが実際に表示された場所とはまったく関係がない場合があります!
おひさしぶりですね。私は今日この同じ問題に直面していたので、手遅れになることは決してないようです。私にとっては、それが起こっていました TextBox
名前のないフォームの中にありました。それから私はフォームにIDを設定し、私は TextBox
このような: idForm.idTextBox.ToString()
. 。私はそれが同じことになるだろうと思います button
.
問題は、Page DirectiveポイントにCodeFileが同じcodeBehindファイルにある複数のASPXファイルがある可能性があることです。同じコントロが同じコードにリンクされたすべてのASPXファイルに存在するため、コンパイルエラーがスローされると予想されます。
3つのファイルすべての名前空間を確認します. 。 Designer.csファイルと他の2つのファイルの名前空間名の間に矛盾がある場合があります。 3つのファイルすべてでその名前のスペース名の一致を必ず確認してください
ページタグの下の継承プロパティを変更するだけです
<% 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
{
...
後でありがとう;)