3

aspdotnetstorefront プラットフォームを使用しているサイトがありますが、これはどの C# サイトにも当てはまります。Account という名前の dll にカスタム コントロールがあります。これには、顧客が名前や電話番号などを入力するためのテキスト ボックスなど、いくつかの要素があります。

DotPeek でソース コードをチェックし、正しい命名規則を使用していることを確認しました。

チェックボックス(請求と同じアカウント情報)がチェックされているときに、姓、名、電話番号を下のボックスにコピーするためにjavascriptのonChangeイベントを使用しようとしています。そのため、顧客が情報が同じであることを選択すると、あるボックスから次のボックスに移動するときに自動的にコピーされます。

奇妙なことに、これは一部のテキスト ボックスでは機能しますが、他のテキスト ボックスでは機能しません。簡単にするために、コンテンツをコピーする JS を削除し、テスト用のポップアップ ボックスに置き換えました。

テキストを変更すると、「Hello World」ポップアップ ボックスが表示されます。

ctrlAccount.txtFirstName.Attributes.Add("onchange", "alert('hello,world')");

しかし、これはしません:

ctrlAccount.txtPhone.Attributes.Add("onchange", "alert('hello,world')");

私が得るエラーは次のとおりです。

CS1061: 'AspDotNetStorefrontControls.Account' には 'txtPhone' の定義が含まれておらず、タイプ 'AspDotNetStorefrontControls.Account' の最初の引数を受け入れる拡張メソッド 'txtPhone' が見つかりませんでした

そのため、コンパイラは電話テキスト ボックスを認識できないようです。レンダリングされたページ コードを見ると (もちろんエラーが削除されている場合)、ボックスがあり、ID は正しいです。

DotPeek でソース コードを読むと、次のようになります。

public Account()
{

  this._txtFirstName = new TextBox();
  this._txtLastName = new TextBox();
  this._txtEmail = new TextBox();
  this._txtPassword = new TextBox();
  this._txtPasswordConfirm = new TextBox();
  this._txtPhone = new TextBox();

}

private void AssignClientReferenceID()
{
  this._txtFirstName.ID = "txtFirstName";
  this._txtLastName.ID = "txtLastName";
  this._txtEmail.ID = "txtEmail";
  this._txtPassword.ID = "txtPassword";
  this._txtPasswordConfirm.ID = "txtPasswordConfirm";
  this._txtPhone.ID = "txtPhone";      
}

(読みやすくするために、他の多くのフィールドを削除しました)。しかし、電話番号のテキスト ボックスには "txtPhone" と "txtFirstName" と "txtLastName" が問題なく機能するはずですが、電話ボックスだけで失敗するのはなぜでしょうか?

4

4 に答える 4

0

これはVSのバグです。単純な再起動が役立ちます。

于 2014-07-07T14:27:01.437 に答える
0

Visual Studio でプロジェクトを開く場合は、右クリックするtxtPhonetxtFirstName、[定義に移動] をクリックします。定義されている場所に移動します。txtFirstName存在しない別の場所から読み取られている可能性がありますtxtPhone

アプリケーションでこの種の警告(エラーではない)がコンパイラで時々表示されますが、実行時に定義が認識され、問題は発生しません。

于 2014-07-14T11:26:34.173 に答える
0

パーツを右クリックし、txtFirstName「定義に移動」を選択します。txtPhoneプロパティが近くに定義されており、アクセス可能であることを確認してください。

于 2014-07-14T05:11:15.433 に答える