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

2

您添加到问题中的代码仅显示 ID 的分配,没有其他内容。我看不到完整的Account控制源代码,但通常带有前导下划线的字段是受保护的或私有的,为了公开这些字段,使用公共属性,所以请检查它是否存在名为txtPhone.

编辑

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

尝试在上面的行上方或上方按下F12插入符号以查看这些属性的定义位置。txtFirstNametxtPhone

PS:不要混淆一个类的id和公共属性的名字

于 2014-07-12T14:02:48.923 回答
0

右键单击txtFirstName零件并选择“转到定义”。确保该txtPhone属性在附近定义并且可以访问。

于 2014-07-14T05:11:15.433 回答
0

这是VS错误,简单的重启应该可以帮助你。

于 2014-07-07T14:27:01.437 回答
0

如果您在 Visual Studio 上打开项目,您可以右键单击txtPhonetxtFirstName单击“转到定义”。它将带您到定义它的地方。也许是从其他不存在txtFirstName的地方读取的。txtPhone

我有时在编译器中的应用程序上收到此类警告(不是错误),但在运行时,它识别定义并且没有引起问题。

于 2014-07-14T11:26:34.173 回答