【问题标题】:ASP.NET onBlur method generating errorASP.NET onBlur 方法生成错误
【发布时间】:2018-07-09 10:18:16
【问题描述】:

我有一个 aspx.page,此 TextBox 位于其中。

<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 文本框中。

关于为什么会出现此错误的任何想法?很高兴做出任何进一步的澄清。

【问题讨论】:

  • 浏览器只能说找不到 txtPolicyNumber_OnBlur javascript 函数。此函数是否位于页面上和脚本块中?查看 F12 工具以查看返回的 DOM,以验证客户端上是否存在该函数。
  • 如果您希望执行一个 VB 方法,那么您必须回发到服务器。您拥有的 ASP.NET 代码指定了一个 JavaScript 函数来执行客户端,而不是一个 VB 函数来执行服务器端。
  • 我更喜欢执行 VB 方法,但我尝试在文本框失去焦点时为其创建一个事件,但这也不起作用。我已经用那部分代码更新了代码。
  • 您正在使用浏览器的 javascript onblur 事件来调用服务器的 vb.net 函数。一种语言与另一种语言不兼容。
  • 用我当前的代码更新了帖子。

标签: asp.net sql-server vb.net onblur


【解决方案1】:

修复

您的页面看不到该方法,因为它是私有的,请将其设置为受保护的。

Protected Sub txtPolicyNumber_OnBlur(...

需要决定

你在两个地方处理偶数。一个在选项卡中,另一个在方法的末尾,带有关键字 Handle。选择一个,最后都做同样的事情。

如果您决定只使用 Handles 而不是在标签中使用,那么您可以将您的方法设置回 Private。

注意

我不确定您是否知道,但浏览器需要刷新页面才能返回服务器。执行 TextChanged 可能无法达到您的预期。此外,将您的方法从 OnBlur 重命名为 TextChanged。

【讨论】:

  • 我明天去看看,然后告诉你。谢谢。
  • @NikosV "Handles" 可以将事件与您的方法挂钩。当文本发生变化时,该事件将触发并调用您的方法。
  • 我意识到并删除了评论。谢谢。当我尝试解决方案时,我会在明天回帖。但是我想知道如果文本永远不会改变为什么“TextChanged”?我所做的只是分散注意力。 TextChanged 是否也涵盖了这一点?
  • @NikosV 仅在回发后更改文本时。 AutoPostBack 使帖子在模糊后返回。理想的方法是在 jQuery 中使用回调(ajax)来实现。
  • 对不起,我不太明白。 MSDN 说 TextChanged 在 TextBox 的值更改时发生。既然我的价值没有改变,而我们所做的只是远离文本框,为什么我们需要 TextChanged 呢?我只是有点困惑。我只想在文本框失去焦点时触发一个事件。那是如何改变文本框的值的?谢谢。
【解决方案2】:

您好 onblur 不是服务器端事件,它是客户端事件,这意味着您必须编写 javascript 方法并在该事件中提供它,您的本地浏览器将调用它。 如果您想在其中进行任何回发,则必须使用 ajax。

然而 OnTextChanged 是一个类似的服务器端事件,如果您想在文本更改时自动触发它,只需在其中命名您的服务器端 vb.net 方法并将 AutoPostBack 属性设置为 true。 AutoPostBack="真"

例如(当您指定服务器端事件时,也删除方法中的括号。)

<asp:TextBox AutoPostBack="True"
 ID="txtPolicyNumber" runat="server" Width="80px" OnTextChanged="txtPolicyNumber_OnBlur" ></asp:TextBox>

【讨论】:

  • 收到此消息“txtPolicyNumber_OnBlur”不是“ASP.reporting_manualadjustments_aspx”的成员
  • 在您的 vb 代码中尝试此方法签名 txtPolicyNumber_OnBlur(sender As Object, _ e As EventArgs) Handles currencyTextBox.TextChanged
  • 好的。我会尽快回复您。
  • 同样的事情发生了。我不确定这是否在我运行 Visual Studio 2010 时起作用...
  • 我不认为这是个问题。检查您的页面指令是否是 代码后面和继承指向您的代码所在的类(CodeBehind="你的文件名" Inherits="你的类名")
猜你喜欢
  • 2018-08-08
  • 2016-11-29
  • 2019-02-05
  • 1970-01-01
  • 2017-06-10
  • 2012-07-26
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多