对Textbox onblur事件执行数据库查询

时间:2010-03-11 18:47:10

标签: c# asp.net-3.5

我正在使用带有C#的asp.net 3.5。当用户在txtProductID中输入ProductID时,我需要进行数据库查找。我想做javascript是不可能的,因为这将是服务器端调用。 我在网页的page_load事件中写了这段代码:

        protected void Page_Load(object sender, EventArgs e)
    {
        txtProductID.Attributes.Add("onblur", "LookupProduct()");
    }

        protected void LookupProduct()
    {
        //Lookup Product information on onBlur event;
    }

我收到一条错误消息:Microsoft JScript运行时错误:预期的对象 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

onblur是一个客户端事件。 LookupProduct是服务器端方法。你不能引用另一个 - 两者之间根本没有关联。

没有快速解决方法 - 你必须在客户端事件上触发回发(使用ClientScriptManager.GetPostBackEventReference)或使用像Microsoft ASP.NET Ajax这样的库实现Ajax回调。

或者,如果您不是真的需要在每次模糊时触发此事件,并且仅当文本已更改时,您只需使用服务器端TextBox.OnChanged事件并将TextBox的AutoPostBack属性设置为true。确保你记得设置AutoPostBack,否则这不会让你到任何地方。

答案 1 :(得分:3)

使用TextBox.TextChanged事件。

ASPX标记:

<asp:TextBox ID="txtProductID" runat="server" AutoPostBack="true" OnTextChanged="txtProductID_TextChanged" />

代码隐藏:

protected void txtProductID_TextChanged(object sender, EventArgs e)
{
   // do your database query here
}

答案 2 :(得分:1)

这应该可以解决问题,如下所述:http://www.codedigest.com/CodeDigest/80-Calling-a-Serverside-Method-from-JavaScript-in-ASP-Net-AJAX---PageMethods.aspx

这些是控件

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True" />
<asp:TextBox ID="txtTest" onblur="LookupProduct()" runat="server" />

这是Javascript

<script language="javascript">
function LookupProduct()
{  
    PageMethods.LookupProduct('',OnSuccess, OnFailure);
}

function OnSuccess(result) {
    if (result)
    {
    }
}

function OnFailure(error) {
}
</script>

这是服务器sidewebmethod

[WebMethod]
public static bool LookupProduct()
{
    return true;
}