读书人

前台js调用靠山c#方法为什么每次都在第

发布时间: 2012-09-17 12:06:51 作者: rapoo

前台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) {                           这里是失败了                       }                    }); 


[解决办法]
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调用方法
[解决办法]
例子

aspx

HTML code
<%@ 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>
[解决办法]
用Ajax异步调用吧,那个方法在页面加载的时候就会执行,建议用JQuer异步调用后台方法
http://hi.baidu.com/812183667/blog/item/5f46202622f6290f918f9dee.html

读书人网 >asp.net

热点推荐