对服务器端事件的 JavaScript 调用

JavaScript call to server side event

本文关键字:JavaScript 调用 事件 服务器端      更新时间:2023-09-26

所以我有一段时间没有做任何 ASP.net 了,我试图调用一些 javascript 验证,这有效,然后我需要调用事件背后的代码。

我以为这会很容易,但它变成了一个正确的麻烦。

我想做的只是检查文本框是否为空,如果是警报并且不运行任何服务端方法,如果它不为空,则运行方法。

不介意更改代码(尽管必须继续使用materpages和内容部分)。

 <input type="submit" value="Update" onclick="validate()"/>
<SCRIPT LANGAUGE="JavaScript">
       function validate() {
           var jname = document.getElementById('MainContent_txtname').value;
           if (jname == null) {
               alert("Please Enter Name");
           }
           else {
               CallServerMethod();
           }
        }
       function CallServerMethod() {
                UpdateClient() //I dont work
                }
       </SCRIPT>

有什么想法吗?谢谢

你可以让 Ajax 调用服务器页(aspx 页/.ashx 处理程序)来执行此操作。这就是你使用jQuery的方式(如果你已经在项目中使用它)

function CallServerMethod()
{
    $.post("yourserverpage.aspx", { name : "Scott" }, function(data){
      //now data variable has the result from server page. do whatver you 
      // want with that. May be an alert
     alert(data);
    });
}

yourserverpage.aspx文件中,您可以从请求参数中读取 name 键值,并执行您想要执行的任何服务器代码并使用 Response.Write() 方法返回一些内容

例如 : Response.Write("user saved");

本网站上有大量关于此主题的信息。

这对你来说是一个好的开始:从客户端 javascript 调用服务器端函数

你要找的是ajax。更简单的方法是使用jquery,它有一个$.get或$.getJSON或$.ajax方法,它包装xmlhttprequest(用于从javascript调用服务器方法的对象)。

另一种简单的方法是查看WebMethod。您需要将[WebMethod]属性设置为服务器端方法,将脚本管理器添加到 aspx 页,然后使用 PageMethods.MyServerMethod 调用服务器方法。

$.ajax({
    type: "POST",
    url: "mypage.aspx/ServerMethodName",    
    data: '{"id":"' + $("#divID").text() + '"}',        
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (returnValueFromServerMethod) {
        if(returnValueFromServerMethod.d != "")
            //do something great
    }
});
[WebMethod]
public static string ServerMethodName(string id)
{
    HttpContext.Current.Session["ID"] = id;            
}

您需要在页面中添加脚本管理器.aspx以启用页面方法。

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">                    
</asp:ScriptManager>

您可以将页面方法的东西替换为服务.svc,这将更干净。

function validate(){
    var jname = document.getElementById("MainContent_txtname').value;
    if(jname.length == 0){
        alert("Empty text field");
    }else{
        CallServerMethod(jname);
    }
}
function CallServerMethod(param){
    var xmlhttp;
    if(window.XMLHttpRequest){
        xmlhttp = new XMLHttpRequest();
    }else{
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    //we have an xmlhttp object
    xmlhttp.onreadystatechange = function(){
        if(xmlhttp.readyState==4 && xmlhttp.status==200){
            var response = xmlhttp.responseText;
            UpdateClient(response);         
        }
    }
    xmlhttp.open("GET","server_page.php?jname="+param,true);
    xmlhttp.send();
}
function UpdateClient(response){
    alert("Server responded with response: "+response);
}

然后将验证设置为 onChange 事件。 所以....<input....onChange="validate();" />

显然,server_page.php也可以是server_page.asp或其他任何东西,该参数只是在GET请求中进行URL编码。您也可以使用发布请求发送它,但这需要更多的工作......

//in the last part of CallServerMethod(),
//replace the last 2 lines with:
xmlhttp.open("POST","server_page.php",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length",param.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send(param);

我一直在使用.ajax({ ...如何做到这一点。但是,我最近遇到了另一种更简单的方法来实现这一目标 - MSDN 链接

一个简单的解决方案是让你的javascript点击一个隐藏的按钮。

<SCRIPT LANGAUGE="JavaScript">
   function validate() {
       var jname = document.getElementById('MainContent_txtname').value;
       if (jname == null) {
           alert("Please Enter Name");
       }
       else {
           CallServerMethod();
       }
    }
   function CallServerMethod() {
            document.getElementById('<%#btnRefresh.ClientID %>').click(); 
            }
   </SCRIPT>

然后在代码隐藏中的按钮单击事件中执行您希望它执行的任何操作。

如果我理解正确,这似乎是最简单的解决方案。