【发布时间】:2014-07-07 14:10:01
【问题描述】:
我有一个使用 aspdotnetstorefront 平台的站点,尽管这应该适用于任何 C# 站点。在名为 Account 的 dll 中有一个自定义控件。这有几个元素,包括供客户输入姓名、电话号码等的文本框。
我已使用 DotPeek 检查了源代码,并确认我使用了正确的命名约定。
我试图使用javascript ondchange事件将第一个名称,姓氏和电话号码复制到较低框中的复选框(检查与计费相同)时。因此,如果客户选择相同的信息,当他们从一个盒子移动到另一个盒子时,它会被自动复制。
奇怪的是,这适用于某些文本框,但不适用于其他文本框。为了简单起见,我删除了复制内容的 JS,并用弹出框替换了它以进行测试。
这行得通,当我更改文本时,我得到一个“Hello World”弹出框:
ctrlAccount.txtFirstName.Attributes.Add("onchange", "alert('hello,world')");
但这不是:
ctrlAccount.txtPhone.Attributes.Add("onchange", "alert('hello,world')");
我得到的错误是:
CS1061:“AspDotNetStorefrontControls.Account”不包含“txtPhone”的定义,也没有扩展方法“txtPhone” 接受类型的第一个参数 可以找到“AspDotNetStorefrontControls.Account”
所以看起来编译器无法识别电话文本框。当我查看呈现的页面代码时(当然,当错误已被删除时)该框就在那里并且 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”的想法工作得很好,那么为什么这只会在电话框上失败?
【问题讨论】:
-
您的字段有下划线。这不是问题吗?还是有属性?
-
这应该可以开箱即用。您的 createaccount.aspx.cs 文件中有这些行吗? ctrlAccount.Phone = Server.HtmlEncode(CommonLogic.IIF(ThisCustomer.Phone.Length != 0, ThisCustomer.Phone, BillingAddress.Phone));
-
我们确实需要查看 C# 代码才能知道问题所在。
-
我昨天在一个答案上写了这个评论,但想让你看到它。 """@valis 好吧,您是否重新编译了代码?我的意思是,如果您更改了 C# 代码并且没有从中构建新的 .dll,即使您重新启动 IIS,您仍将使用旧的 .dll。"" “ - 干杯!
-
这是在页面后面的代码中,它引用了 .dll 中的内容,但都没有改变。
标签: c# javascript asp.net aspdotnetstorefront