Я использую asp.net 3.5 с C#. Я должен сделать поиск базы данных, когда пользователь вводит ProductID в txtProductID. Я предполагаю, что выполнение 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: Object ожидал, Как я могу разрешить это?
Используйте событие 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
}
Это должно помочь, как указано здесь: 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>
Это веб-метод на стороне сервера
[WebMethod]
public static bool LookupProduct()
{
return true;
}
onblur
- событие на стороне клиента. LookupProduct
- это метод на стороне сервера. Вы не можете ссылаться на одно из другого - между ними просто нет никакой связи.
Быстрого решения этой проблемы нет - необходимо либо инициировать обратную передачу для клиентского события (используя ClientScriptManager.GetPostBackEventReference
), либо реализовать обратный вызов Ajax с помощью библиотеки, такой как Microsoft ASP.NET Ajax. .
В качестве альтернативы, если вам действительно не нужно запускать это событие при каждом размытии, и только когда текст изменен , вы можете просто использовать серверный TextBox.OnChanged
и задайте для свойства TextBox AutoPostBack
значение true
. Не забудьте установить AutoPostBack
, иначе это ни к чему не приведет.