我正在使用带有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运行时错误:预期的对象 我该如何解决这个问题?
答案 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;
}