我有一个 aspx.page ,该文本框位于其中。
<asp:TextBox ID="txtPolicyNumber" runat="server" AutoPostBack="true" Width="90px" OnTextChanged="txtPolicyNumber_OnBlur"></asp:TextBox>
每次我单击此文本框时,键入一些内容,然后单击我希望该方法执行的位置(失去焦点)。
VB.NET
Private Sub txtPolicyNumber_OnBlur(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtPolicyNumber.TextChanged
txtPlanCode.Text = Company.Applications.ProductionEngine.BusinessAccess.ManualAdjustmentsBusinessAccess.GetPlanCode(txtPolicyNumber.Text)
End Sub
此方法基本上调用ExecuteScalar并从数据库返回一个值。
SQL
SELECT PolicyPlanCode
FROM bo.PolicyTransactions
WHERE PolicyNumber = @policyNumber
AND PolicyTransactionRowNumberAsc = 1
txtPolicyNumber保留作为参数@policyNumber传入的值。
一旦我加载页面,就会发生此错误。
编译器错误消息:BC30456:'txtPolicyNumber_OnBlur'不是'ASP.reporting_manualadjustments_aspx'的成员
我需要做的是,当txtPolicyNumber失去焦点时,应调用txtPolicyNumber_OnBlur,并且来自Sub txtPolicyNumber_OnBlur()的结果应出现在txtPlanCode.Text文本框中。
关于为什么会出现此错误的任何想法?很高兴进一步澄清。
答案 0 :(得分:1)
修复
您的页面看不到该方法,因为它是私有方法,请将其设置为保护状态。
Protected Sub txtPolicyNumber_OnBlur(...
需要决定
您可以在两个地方处理偶数。一个位于选项卡中,另一个位于方法结尾处,关键字为Handle。选择一个,最后两者都做同样的事情。
如果您决定仅使用Handles而不在代码中使用它,则可以将方法设置回Private。
注意
我不确定您是否知道,但是浏览器需要刷新页面才能返回服务器。进行TextChanged可能不会达到您的期望。另外,将您的方法从OnBlur重命名为TextChanged。
答案 1 :(得分:0)
您的onblur不是服务器端事件,而是客户端事件,这意味着您必须编写javascript方法并在该事件中提供它,然后本地浏览器会调用它。 如果要在其中进行任何回发,则必须使用Ajax。
但是,如果您要在文本更改时自动触发OnTextChanged,则它是一个类似的服务器端事件,只需在其中命名您的服务器端vb.net方法并将AutoPostBack属性设置为true。 AutoPostBack =“ True”
eg(在指定服务器端事件时也请删除方法中的括号。)
<asp:TextBox AutoPostBack="True"
ID="txtPolicyNumber" runat="server" Width="80px" OnTextChanged="txtPolicyNumber_OnBlur" ></asp:TextBox>