日期:2014-05-17  浏览次数:20508 次

前台js调用后台c#方法为什么每次都在第一次加载时执行
后台(default.aspx.cs)c#方法,此方法是通过某条件查询出来的一结果
C# code
 
    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)
HTML code
 
    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是空的,返回的结果自然是空


------解决方案--------------------
你上面调用的后台方法 仅会在加载default.aspx时执行一次
实现不了你要求的功能

解决方法:把GetSType()用ajax请求的方式实现
------解决方案--------------------
.NET AJAX实例
讲得简单清楚

或者用ajaxpro
------解决方案--------------------
先执行后台程序,生成HTML页面,然后浏览器解析,执行JS!
你这么写当然先执行了

用AJAX,或者据说.net4.0 可以JS调用后台代码了!
------解决方案--------------------
换一个思路就是了,你可以在rows.count>0时把你要保存的值赋值给一个<input type="hidden" runat="server" />就是了,再用js调用不就OK了
------解决方案--------------------
去看看ajax.pro吧 呵呵
1.下个AjaxPro.2.dll 引用到项目里 
2.然后在你整个aspx.cs里注册
AjaxPro.Utility.RegisterTypeForAjax(typeof(当前页面类文件名));
3.然后在这个类里写个方法
C# code
[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;
}

------解决方案--------------------
后台方法加public static
加上[System.Web.Services.WebMethod]


前台用AJAX调用。
JScript code
  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) {
                           这里是失败了
                       }