0

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

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

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

不要介意更改代码,(尽管必须继续使用母版页和内容部分)。

 <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>

有任何想法吗?谢谢

4

6 回答 6

2

您可以让 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文件中,您可以从请求参数中读取名称键值并执行您想要执行的任何服务器代码并使用 Response.Write() 方法返回一些内容

前任 :Response.Write("user saved");

于 2012-05-23T16:52:01.937 回答
0

这个网站上有很多关于这个主题的信息。

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

于 2012-05-23T16:50:21.950 回答
0

您正在寻找的是ajax。更简单的方法是使用具有 $.get 或 $.getJSON 或 $.ajax 方法的 jquery,该方法包装了 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;            
}

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

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

您可以将页面方法的内容替换为更清洁的服务 .svc。

于 2012-05-23T16:56:59.880 回答
0
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);
}

然后将 validate 设置为 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);
于 2012-05-23T17:02:51.183 回答
0

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

于 2012-05-23T18:11:59.250 回答
0

一个简单的解决方案是让您的 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>

然后在代码隐藏中的按钮单击事件中做任何你想做的事情。

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

于 2012-05-24T23:05:01.443 回答