2017-01-23 102 views
1

我想在单击按钮时使用外部javascript调用aspx.cs函数。使用外部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。

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.js文件<%=sform.ClientID %>

  • 你叫lookup(); return false;但JavaScript的方法被称为Signup
  • 你有这个。但是该文件是使用<script ... ></script>标记引入的,该标记是浏览器的单独请求,由静态处理程序处理。所以<%=sform.ClientID %>将不会解决。
  • 您的所谓的网络方法未正确定义,它试图在页面中使用控件,就好像它是回发事件处理程序。

工作示例(为我的作品):

Web表单:

<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

相关问题