2017-01-23 1 views
1

Я пытаюсь вызвать функцию aspx.cs с помощью внешнего javascript при нажатии кнопки.с использованием внешних js для вызова функции aspx.cs (при нажатии кнопки)

Вот ASPX

<head runat="server"> 
    <title></title> 
    <link href="style.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="<%= ResolveUrl ("~/Scripts/lookup.js") %>"></script> 
</head> 
<body> 

     <section class="webdesigntuts-workshop"> 
      <asp:ScriptManager ID='ScriptManager1' runat='server' EnablePageMethods='true' /> 
    <form id="form1" runat="server">    
     <asp:TextBox type="search" name="search" id="sform" placeholder="What are you looking for?" runat="server" />  
     <asp:TextBox type="search" name="hdnText" id="hdnText" runat="server" /> 

     <button id="Button1" runat="server" onclientclick="lookup();return false;">Search</button> 
    </form> 
</section> 

</body> 

Вот мой JavaScript lookup.js, который находится в папке Scripts.

function Signup() { 
    var query = document.getElementById('<%=sform.ClientID %>').value; 


    PageMethods.lookupfromjs_Click(query); 

    function onSucess(result) { 
     alert(result); 
    } 

    function onError(result) { 
     alert('Cannot process your request at the moment, please try later.'); 
    } 
} 

вот функция aspx.cs.

protected void lookupfromjs_Click(String query) 
     { 

      if (!String.IsNullOrEmpty(query)) 
      { 
       hdnText.Text = "query= " + query + " look up number " + lookup_no++; 

       // sform.Text= "You are looking up the term " + query; 

      } 
     } 

В VS или в браузере таких ошибок нет. Но мои точки останова в браузере, похоже, не срабатывают. Скрипт java правильно загружен браузером. Однако при нажатии кнопки ничего не происходит.

Любая помощь будет оценена по достоинству.

+0

Что это? 'protected void lookupfromjs_Click (String query) –

+0

AFAIK метод в aspx.cs должен быть статическим и также помечен '[System.Web.Services.WebMethod]'. Вы уже пробовали это? – Kolichikov

+0

спасибо .. я пропустил «статический» – codingyo

ответ

0

Если вы работаете с файлами .aspx, вы используете рамки webforms. Если вы используете webforms, то нормальная вещь здесь должна состоять в том, чтобы иметь <asp:Button runat="server" ...></asp:Button> с обработчиком событий на странице, расположенной за страницей. Если вы хотите избежать postbacks, то вы используете неправильную фреймворк.

Это, конечно, случаи, когда пост назад излишне тяжелый, и вы просто хотите запустить крошечный фрагмент кода на сервере. Затем можно использовать методы страницы.

Для того, чтобы метод в коде позади, чтобы можно было использовать в качестве page method, метод должен:

  • быть оформлен с атрибутом [WebMethod] - System.Web.Services.WebMethod
  • быть объявлен public static

Обратите внимание, что метод страницы не может работать с элементами управления на странице. Метод страницы вызывается с использованием запроса ajax. Не происходит полного генерации страниц. Любые обновления страницы, использующей метод страницы, должны выполняться с использованием javascript после возврата метода.

Есть по крайней мере несколько различных очевидных ошибок в коде:

  • Вы называете lookup(); return false; однако Javascript метод называется Signup
  • У вас есть это: <%=sform.ClientID %> в файле lookup.js. Но этот файл вводится с использованием тега <script ... ></script>, который является отдельным запросом браузера, обработанным статическим обработчиком. Таким образом, <%=sform.ClientID %> не будет разрешен.
  • Ваш так называемый Неправильно определен веб-метод, и он пытается работать с элементами управления на странице, как если бы это был обработчик события post back.
  • Etc

Работа образца (работает для меня):

Веб-форма:

<head runat="server"> 
    <title></title> 
    <script type="text/javascript" src="<%= ResolveUrl("~/Scripts/lookup.js") %>"></script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server" 
      EnablePageMethods="true"> 
     </asp:ScriptManager> 
     <asp:TextBox type="search" name="search" ID="sform" placeholder="What are you looking for?" runat="server" /> 
     <asp:TextBox type="search" name="hdnText" ID="hdnText" runat="server" /> 
     <button id="Button1" onclick="Signup('<%= sform.ClientID %>', '<%= hdnText.ClientID %>');">Search</button> 
    </form> 
</body> 

JavaScript:

function Signup(sformId, hdnId) { 
    var query = document.getElementById(sformId).value; 
    var res = PageMethods.lookupfromjs_Click(query, onSucess, onError); 
    function onSucess(result) { 
     document.getElementById(hdnId).value = result; 
     alert(result); 

    } 
    function onError(result) { 
     alert('Cannot process your request at the moment, please try later.'); 
    } 
} 

метод Страница:

[System.Web.Services.WebMethod] 
public static string lookupfromjs_Click(String query) 
{ 
    return "query was " + HttpUtility.UrlEncode(query); 
} 
+0

Спасибо, это сработало для меня :) – codingyo

Смежные вопросы