关于JS调用后台方法,为页面绑定值的问题。。

president_weibo 2013-01-04 02:12:45
<script type="text/javascript" >

function cs(jlzdID, userID) {

var a = '<%=BindAll("' + jlzdID + '","' + userID + '") %>';

window.location.href = location.href;
alert(jlzdID + "\n" + userID+a);
}
</script>

为什么我这个脚本放在body外面就会报错呢,可是放在body里面我在传值调用这个脚本的时候后台给页面绑定值的方法走完页面就不会显示出来我绑定的值,但是返回的值我在前台可以接收到并弹出来。如果我直接把jlzdID与userID赋值,在页面第一次打开的时候就会调用后台的方法并把值赋到页面。请问这个怎么可以在我调用JS时我的页面也把值赋上呢,这两个值是在别的程序里面传递过来的。。还有为什么脚本写在body外面会出错,在body外面应该怎么调用后台的代码呢?
...全文
708 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
president_weibo 2013-01-07
  • 打赏
  • 举报
回复
引用 20 楼 orain 的回复:
引用 17 楼 president_weibo 的回复:使用function cs(jlzdID,userID){$.ajax(){};} 可以吗?我用这个总提示我缺少对象,还有就是在这里面调后台的绑定值的方法以后页面会不会把我的值绑定上去(这个页面是已经加载完成的)?他还会不会再加载一边,如果重新加载会不会把我传过来的数据又给清空了? $.ajax() 你要提供参数,……
哎,越来越乱了。。 这是我后台的方法,
[WebMethod]
    public bool BindAll(string jlzdID, string strUserID)
    {
        //ShowJlzdInfo(jlzdID); 按jlzdID查出一条数据并绑定到页面的文本框中。
        //Bind(strUserID);  按用userID查询出数据资料柜中该用户上传的材料并绑定至页面中。
        if (ShowJlzdInfo(jlzdID)&&Bind(strUserID))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
这个方法主要是把查出来的数据绑定到页面中,本来我都没有返回值,不过没有返回值在前台好像不好调所以就加了返回值。现在的情况是我用普通JS脚本接收到我winfrom程序中传过来的cs(jlzdID,userID)函数中的两个参数的值然后要在JS中调用这个后台BindAll这个方法,并把接受到的两个值传给BindAll在后台给页面绑定值,可是不用Ajax他只是把BindAll方法走一遍,但是不能够把页面的值加载上,用Ajax我不知道怎么用呢,怎么把这两个值传到后台的BindAll方法中并且这个方法还能把值绑定到页面中并显示出来。。 下面是我现在正在编写的前台代码。

    <script type="text/javascript">

        function cs(jlzdID, userID) {
        
            var url = "/JLZDShenQing/JlzdShenQing.aspx/BindAll";
            var data = "{jlzdID:" + jlzdID + ",jlzdID:" + jlzdID + "}";
            $.ajax({
                url: url,
                data: data,
                cache: false,
                type: 'POST',
                contentType: "application/json",
                dataType: 'json',
                async: true,
                timeout: 10000, 
                error: function(e) {
                    alert("error:请求超时...")
                },
                success: function(result) {
                
                }
            });
        }
    </script>

wdm_win 2013-01-07
  • 打赏
  • 举报
回复
$.ajax({ type: "get", cache: false, url: "ajax.aspx", data: "mod=标识", success: function (msg) { if (msg == "test") { alert("testok"); } } }); if (mod == "标识") { Response.Write("test"); } {
orain 2013-01-07
  • 打赏
  • 举报
回复
引用 17 楼 president_weibo 的回复:
使用function cs(jlzdID,userID){$.ajax(){};} 可以吗?我用这个总提示我缺少对象,还有就是在这里面调后台的绑定值的方法以后页面会不会把我的值绑定上去(这个页面是已经加载完成的)?他还会不会再加载一边,如果重新加载会不会把我传过来的数据又给清空了?
$.ajax() 你要提供参数,简单的获取我常用如下的方式: var url = '?Method=MyMethod&cId=xx&cState=xxx'; $.get(url, function(rs) { // rs 为后台返回的数据 }); 后台可以用

protected void Page_PreInit(object sender, EventArgs e)
{
	if (!IsPostBack)
	{
		string method = Request.QueryString["Method"];
		if (!String.IsNullOrEmpty(method))
		{
			switch (method)
			{
				case "MyMethod":
					MyMethod();
					break;
			}
			Response.End();
		}
	}
}

private void MyMethod()
{
  int cId = int.Parse(Request.QueryString["cId"]);
  ...
  // 使用 Response.Write(xxx) 输出你的数据
}
当然,你也可以用一个单独的 ashx 来处理 ajax 请求,这对于如果有多个页面调用同一个 ajax 请求很有用。将 url 改为 xxx.ashx?Method=xx&参数 这种形式就可以了。后台如下:

public void ProcessRequest (HttpContext context) 
{
	string method = context.Request.QueryString["Method"];
	if (!String.IsNullOrEmpty(method))
	{
		switch (method)
		{				
			case "GetMessage":
				GetMessage(context);
				break;				
		}			
	}
}
如果要使用 Session 的话,ashx 必须要实现接口 IRequiresSessionState,这里其实只是声明一下,不需要具体去实现。 ajax 加载的数据对你当前的页面不会造成影响,你通过 JS 操作 DOM 将返回的数据处理后放在适当的位置就可以了。
president_weibo 2013-01-07
  • 打赏
  • 举报
回复
引用 18 楼 peng2739956 的回复:
这个如果必须有这种需求 用webservers 也是可以的 C# code?123456789101112131415//webservers[WebMethod(EnableSession = true)] public string updateCatalogState(int cid,int cstate) { if (Session[……
谢谢,主要是调后台的方法,用传递的值查询出数据然后绑定到页面。可是这个页面本来就是打开的,我绑定上以后不知道怎么它就能显示出来。
peng2739956 2013-01-07
  • 打赏
  • 举报
回复
这个如果必须有这种需求 用webservers 也是可以的

//webservers
[WebMethod(EnableSession = true)]
    public string updateCatalogState(int cid,int cstate)
    {

        if (Session["userName"] != null)
        {
            if (CatalogAdmin.updateCatalogStateBycid(cid, (cstate == 0 ? 1 : 0)))//查询数据
                return "success";
            else
                return "";
        }
        else
            return "";
    }

 <a href="javascript:" onclick="ChangeUserState(<%# Eval("Cid").ToString() %>,<%#Eval("CState").ToString()%>)" id="changeStateBtn">11111</a></span>
<script type="text/javascript">
    function ChangeUserState(cid,cstate){
       if(confirm("确定操作?")){
                     WebService.updateCatalogState(cid,cstate,onSuccess);
               }
     return false;
           
    }
    function onSuccess(result){
        if(result=="success"){
            alert("更改成功!");
             window.location="<%# Request.Url %>";
            return ;
        }
        else {
             alert("更改失败!");
             
              window.location="<%# Request.Url %>";
            return ;
        }
    }
</script>
president_weibo 2013-01-07
  • 打赏
  • 举报
回复
引用 16 楼 orain 的回复:
放哪里都调用不到,记住,不要试图在 <% %>、<%= %> 中使用 JS 变量,因为其中的代码是 C# 代码,也即是后台的代码,JS 是属于前台的。 9 楼的给的代码是错误的,<%=getString("'+val+'") %> 对于后台来说,参数 xx 的值为 ' +val+ ',所以在页面上生成的 html 为 alert('' +val+ 'www.baidu.……
使用function cs(jlzdID,userID){$.ajax(){};} 可以吗?我用这个总提示我缺少对象,还有就是在这里面调后台的绑定值的方法以后页面会不会把我的值绑定上去(这个页面是已经加载完成的)?他还会不会再加载一边,如果重新加载会不会把我传过来的数据又给清空了?
ddgx 2013-01-07
  • 打赏
  • 举报
回复
引用 16 楼 orain 的回复:
放哪里都调用不到,记住,不要试图在 <% %>、<%= %> 中使用 JS 变量,因为其中的代码是 C# 代码,也即是后台的代码,JS 是属于前台的。 9 楼的给的代码是错误的,<%=getString("'+val+'") %> 对于后台来说,参数 xx 的值为 ' +val+ ',所以在页面上生成的 html 为 alert('' +val+ 'www.baidu.……
受教了,差点误人误己
orain 2013-01-06
  • 打赏
  • 举报
回复
放哪里都调用不到,记住,不要试图在 <% %>、<%= %> 中使用 JS 变量,因为其中的代码是 C# 代码,也即是后台的代码,JS 是属于前台的。 9 楼的给的代码是错误的,<%=getString("'+val+'") %> 对于后台来说,参数 xx 的值为 ' +val+ ',所以在页面上生成的 html 为 alert('' +val+ 'www.baidu.com'),因此你能够得到一个正确的解,但过程是彻头彻尾的错了,如果要对参数 xx 做一些处理,如 return xx.Substring(0, 1) + "www.baidu.com"; JS 就报错了。 要做到你预想的效果,只能是通过 Ajax,建议你看下 JQuery,其实也不复杂。
president_weibo 2013-01-06
  • 打赏
  • 举报
回复
引用 13 楼 wangwei703 的回复:
还是发个完整点的代码来看看吧
这个好像不行,需要用Ajax呢,因为我是在winfrom程序里面调的这个脚本,这是在这个页面加载完成以后然后在winfrom程序调用这个脚本并且在winfrom程序把两个值传过来。这边接受的这两个值才调用后台的给页面绑定值的方法,可是用Ajax如果不用juery我就不知道怎么把这两个值传给后台的方法了。用juery好像就不能在winfrom中就调用不到cs这个脚本函数并把两个值传过来了。。 哎 好纠结啊。弄个这弄了好长时间了。
president_weibo 2013-01-04
  • 打赏
  • 举报
回复
引用 13 楼 wangwei703 的回复:
还是发个完整点的代码来看看吧
好吧,我明天整理下给你发。下班了~ 等我呢。。今天谢谢你了啊
ddgx 2013-01-04
  • 打赏
  • 举报
回复
还是发个完整点的代码来看看吧
president_weibo 2013-01-04
  • 打赏
  • 举报
回复
引用 11 楼 wangwei703 的回复:
你可以先把其他的代码先注释了,只用个简单的前台调用后台代码试试看,特别是这个:window.location.href = location.href; 先注释了试试看,看起来不像是调用不到后台方法的问题
我原来就没有写window.location.href = location.href;,如果写在body里面可以调用到后台的方法,写在head里面就会出现下面的错误。 “/Lilosoft.CWS.Standard”应用程序中的服务器错误。 -------------------------------------------------------------------------------- 控件包含代码块(即 <% ... %>),因此无法修改控件集合。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 控件包含代码块(即 <% ... %>),因此无法修改控件集合。 源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 堆栈跟踪: [HttpException (0x80004005): 控件包含代码块(即 <% ... %>),因此无法修改控件集合。] System.Web.UI.ControlCollection.AddAt(Int32 index, Control child) +8681370 System.Web.UI.PageTheme.SetStyleSheet() +450 System.Web.UI.Page.OnInit(EventArgs e) +8711526 System.Web.UI.Control.InitRecursive(Control namingContainer) +333 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +378
ddgx 2013-01-04
  • 打赏
  • 举报
回复
你可以先把其他的代码先注释了,只用个简单的前台调用后台代码试试看,特别是这个:window.location.href = location.href; 先注释了试试看,看起来不像是调用不到后台方法的问题
president_weibo 2013-01-04
  • 打赏
  • 举报
回复
引用 9 楼 wangwei703 的回复:
前台: <head runat="server"> <title></title> <script> var val="http://"; alert('<%=getString("'+val+'") %>'); </script> </head> <body> <form id="form1" runat="ser……

<head runat="server">
    <title></title>
    <link href="../App_Themes/Default/StyleSheet.css" rel="stylesheet" type="text/css" />

    <script src="../Controls/My97DatePicker/WdatePicker.js" type="text/javascript"></script>

       <script type="text/javascript" >

           function cs(jlzdID, userID) {

               var a = '<%=BindAll("' + jlzdID + '","' + userID + '") %>';

               window.location.href = location.href;
               alert(jlzdID + "\n\t" + userID + a);
           }
        </script>

</head>

public string BindAll(string jlzdID, string strUserID)
    {
        ShowJlzdInfo(jlzdID);
        Bind(strUserID);
        return "wei";
    }
我看着没区别啊,就一个<script type="text/javascript" >里面一个加type一个没加。。还有就是alert弹出的方式不一样啊。
ddgx 2013-01-04
  • 打赏
  • 举报
回复
前台:
<head runat="server">
<title></title>
<script>
var val="http://";
alert('<%=getString("'+val+'") %>');
</script>
</head>
<body>
<form id="form1" runat="server">
<div>

</div>
</form>
</body>
</html>
后台:
protected string getString(string xx)
{
return xx+"www.baidu.com";
}
运行结果:


看看和你的代码有啥区别
president_weibo 2013-01-04
  • 打赏
  • 举报
回复
引用 7 楼 wangwei703 的回复:
看看是不是这方面问题? 1)如果放在form之外,head之内,需要在head内加上runat="server" 属性。 2)后台cs方法,不能为私有,需要为protected或者public。 基本就这两点
谢谢,我刚看了下head里面加runat="server"了,我后台的方法也是public修饰的。
ddgx 2013-01-04
  • 打赏
  • 举报
回复
看看是不是这方面问题? 1)如果放在form之外,head之内,需要在head内加上runat="server" 属性。 2)后台cs方法,不能为私有,需要为protected或者public。 基本就这两点
president_weibo 2013-01-04
  • 打赏
  • 举报
回复
引用 1 楼 z81434362 的回复:
'<%=BindAll("' + jlzdID + '","' + userID + '") %>';只能放在body里,VS生成HTML时会调用,而function 在客户端执行的 找不到BindAll函数,可以用 webservice 解决
能详细写下代码么。。 用webservice,把BindAll这个方法写在哪儿?还是在这个页面的后台吗?前台调用时怎么调用?
president_weibo 2013-01-04
  • 打赏
  • 举报
回复
引用 2 楼 kongwei521 的回复:
你可以放到页面的最下面。因为body之前还么有走from里面的东西。后台的代码还没加载上。
这个JS是在页面都加载完了处于打开状态时在别的程序里面调的。
president_weibo 2013-01-04
  • 打赏
  • 举报
回复
引用 3 楼 claymore1114 的回复:
放在 哪里都是一样,都不好使。 后台 和 前台 还没分清楚,你的可以用ajax。 1.后台先生成 html, 你的BindAll函数 这时会调用,跟前台不搭噶。 2.后台再发送html(包含已经绑定的数据)到浏览器,这时 后台的东东早没了,你的BindAll方法早没了,只有html js css了。 3.接着是 浏览器解析 html,从上之下,碰到 要求请求的地址 url,会请求服务器,……
我原本想的就是用Ajax,但是Ajax我不知道怎么把这两个值传到后台,用jquery时我在调用JS函数时会出现调不到它的情况,这个JS是在另一个winfrom程序中通过
win.execScript(strScriptName, "javascript");
调用的。麻烦能写下这个Ajax是怎么写的吗?谢谢了。
加载更多回复(3)

62,050

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧