后台(default.aspx.cs)c#方法,此方法是通过某条件查询出来的一结果    protected string GetSType()
    {
        string SamType = "";
        DataSet ds = CommonDAL.NoPager("", "SELECT SAMPLE_TYPE FROM CHECK_TASK WHERE RSTATE='1' AND TASK_NO='" + this.txtTaskNo.Text + "'");
        if (ds.Tables[0].Rows.Count > 0)
        {
            SamType = ds.Tables[0].Rows[0]["SAMPLE_TYPE"].ToString();
        }
        return SamType;
    }
前台js调用此方法(default.aspx)    function GetEntInfo()
    {   
        var TaskNo=document.getElementById("<%=txtTaskNo.ClientID%>").value;  
     if (TaskNo == ""){
            alert("请您先填写任务编号!");
            return false;
    }
    
var tye="<%=GetSType() %>";
alert(tye);
        creatWindow();
        w1.setText("选择企业信息");
        w1.attachURL("GetEntInfo.aspx?SamType="+tye+"&rdt="+ Date());
    }
问题:1.为什么每次在第一次加载时就执行了c#方法 GetSType()
     2.从而导致了刚加载的时候文本框this.txtTaskNo.Text是空的,返回的结果自然是空

解决方案 »

  1.   

    这个本来就是这样,<% %>里的代码是在server上运行的
      

  2.   


        function GetEntInfo()
        {   
            var TaskNo=document.getElementById("<%=txtTaskNo.ClientID%>").value;  
            if (TaskNo == ""){
                alert("请您先填写任务编号!");
                return false;
            }
            
        var tye="<%=GetSType() %>";
        alert(tye);
            creatWindow();
            w1.setText("选择企业信息");
            w1.attachURL("GetEntInfo.aspx?SamType="+tye+"&rdt="+ Date());
        }我是想在执行js函数GetEntInfo()的时候执行var tye="<%=GetSType() %>";
      

  3.   

    你上面调用的后台方法 仅会在加载default.aspx时执行一次
    实现不了你要求的功能解决方法:把GetSType()用ajax请求的方式实现
      

  4.   

    恩  根本没有执行你后台的方法用ajaxpro
      

  5.   


    是的,只在第一次加载的时候执行了一次.如何用ajax实现,能否给个详细的例子,谢谢了
      

  6.   

    .NET AJAX实例
    讲得简单清楚或者用ajaxpro
      

  7.   

    先执行后台程序,生成HTML页面,然后浏览器解析,执行JS!
    你这么写当然先执行了用AJAX,或者据说.net4.0 可以JS调用后台代码了!
      

  8.   

    换一个思路就是了,你可以在rows.count>0时把你要保存的值赋值给一个<input type="hidden" runat="server" />就是了,再用js调用不就OK了
      

  9.   

    在你后台protected string GetSType()方法中:this.txtTaskNo.Text 这要得到值需要通过post得到(如asp中用Request.Form获取文本框的值)
    你前台 var tye="<%=GetSType() %>"; 
    你即使js更改了它的值,不回发到服务器,服务器this.txtTaskNo.Text仍然得不到这个改变后的值。你加一个 <input type="submit" value="submit" /> 点点看
      

  10.   

    去看看ajax.pro吧  呵呵
    1.下个AjaxPro.2.dll 引用到项目里 
    2.然后在你整个aspx.cs里注册
    AjaxPro.Utility.RegisterTypeForAjax(typeof(当前页面类文件名));
    3.然后在这个类里写个方法
    [AjaxPro.AjaxMethod]
    public string GetSType(string txt)//ajaxpro方法里不能用控件,你只能再js里将text控件取出来然后以参数形式带过来
    {
    string SamType = "";
            DataSet ds = CommonDAL.NoPager("", "SELECT SAMPLE_TYPE FROM CHECK_TASK WHERE RSTATE='1' AND TASK_NO='" + txt + "'");
            if (ds.Tables[0].Rows.Count > 0)
            {
                SamType = ds.Tables[0].Rows[0]["SAMPLE_TYPE"].ToString();
            }
            return SamType;
    }
    4.在你的aspx页面里直接调用这个方法
    var TaskNo=document.getElementById("<%=txtTaskNo.ClientID%>").value;  
    var ret = 类名. GetSType(TaskNo).value;//这就是你要调用CS代码里的方法结果 自己再在JS函数里处理
      

  11.   

    要么你用ajax要么你就每次刷新页面吧!!!
    你问问你同事,像这样的问题应该他们都会,要不耻下问。
      

  12.   

    咋看不懂你说的呢
    貌似你说的是第一次加载了GetSType()方法而你是不想让第一次调用是吧  ??
       咋看有人回答是相反的呢  ??
     还是我没有看懂  ??
      

  13.   

    后台方法加public static
    加上[System.Web.Services.WebMethod]
    前台用AJAX调用。
      var params = '{str:"'+$(this).val()+'"}';        //参数,参数名要和后台方法名字一样
                    $.ajax({ 
                            type: "POST", 
                            url: "页面/方法名", 
                            data: params, 
                            dataType: "text", 
                            contentType: "application/json; charset=utf-8",                       
                            success: function(msg) {    //msg就是方法返回值
                                      //这里是请求成功做的操作
                            }, 
                            error: function(xhr, msg, e) {
                               这里是失败了
                           }
                        });
      

  14.   

    ajax调用方法获取数据
                 var url = "../RegistValidate.ashx?username=" + escape(id);
                xmlHttp.open("GET", url, true);
                xmlHttp.onreadystatechange = ShowResult;
                xmlHttp.send(null);
                function ShowResult() {
                     if (xmlHttp.readyState == 4) {
                    if (xmlHttp.status == 200) {
                        var s;
                        s = xmlHttp.responseText;
                 }
            }
    RegistValidate.ashx调用方法
      

  15.   

    调用web services
    有参数调用
            $(document).ready(function() {
                $("#btn2").click(function() {
                    $.ajax({
                        type: "POST",
                        contentType: "application/json",
                        url: "WebService1.asmx/方法",
                        data: "{value1:''}",
                        dataType: 'json',
                        success: function(result) {
                        }
                    });
                });
            });
      

  16.   


    能不能具体一点呀, 我用的是vs20008的开发工具,是否要引用ajaxpro?多谢
      

  17.   

    vs2008 自带ajax框架,是否还须引用ajaxpro.dll。
      

  18.   

    老孟 如何写呀?请赐教啊 tks
      

  19.   

    例子aspx
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default7.aspx.cs" Inherits="Default7" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>  <script>
        function GetEntInfo() {
          var TaskNo = document.getElementById("<%=txtTaskNo.ClientID%>").value;
          if (TaskNo == "") {
            alert("请您先填写任务编号!");
            return false;
          }      var tye = getType();
          alert(tye);
          //        creatWindow();
          //        w1.setText("选择企业信息");
          //        w1.attachURL("GetEntInfo.aspx?SamType=" + tye + "&rdt=" + Date());
        }    function getType() {
          x = window.XMLHttpRequest ? new window.XMLHttpRequest : new ActiveXObject("Msxml2.XMLHTTP")
          x.open("GET", "<%= Request.Url.LocalPath %>?type=exec&" + Date.parse(new Date()), false);
          x.send(null);
          if (x.status == 200) {
            return x.responseText;
          }
          else {
            return "";
          }    }
      </script></head>
    <body>
      <form id="form1" runat="server">
      <div>
      </div>
      <asp:TextBox ID="txtTaskNo" runat="server"></asp:TextBox>
      </form>
      <p>
        <input id="Button1" type="button" value="测试" onclick="GetEntInfo()" /></p>
    </body>
    </html>c#using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;public partial class Default7 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
          if (Request.QueryString["type"]!=null && Request.QueryString["type"].Equals("exec"))
          {
            Response.ClearContent();
            Response.Write( GetSType());
            Response.End();
          }
        }
        protected string GetSType()
        {     
          return DateTime.Now.ToString();
        }
    }
      

  20.   

    用Ajax异步调用吧,那个方法在页面加载的时候就会执行,建议用JQuer异步调用后台方法
    http://hi.baidu.com/812183667/blog/item/5f46202622f6290f918f9dee.html
      

  21.   


    谢谢老孟,问题解决了,真的很感谢你.可否说下是什么机制,呵呵 tks