首页 新闻 搜索 专区 学院

为什么js执行的结果都是一样的?

0
悬赏园豆:40 [已解决问题] 解决于 2013-12-03 13:31

我是新手,刚刚学习。net ,之前做的一个程序中有一个js前台调用后台的部分,不明白为什么js执行的结果都是一样的,还是只执行了一次,或是其他?效果是类似智能提示的东西(控件本身自带有相同的功能,只是自己想重写一个。)

前台: 

 function SchoolsChange()
        {
      var a="55";
        
          a=" <%=SchoolsChange()%>";
          
            alert(a);
        }

                 <dx:ASPxComboBox ID="cmbSchools" runat="server" ClientIDMode="AutoID" CssFilePath="~/App_Themes/Aqua/{0}/styles.css"
                                CssPostfix="Aqua" onkeyup="SchoolsChange()"    LoadingPanelImagePosition="Top" ShowShadow="False"   SpriteCssFilePath="~/App_Themes/Aqua/{0}/sprite.css" DropDownStyle="DropDown" OnTextChanged="cmbSchools_TextChanged" AutoPostBack="True" IncrementalFilteringMode="Contains">

后台:

protected  string   SchoolsChange(  )
        {
         
            DataView dv = new DataView();
            dv = schoolsDT.DefaultView;
            string SelectK = " sch_name like '%" + this.cmbSchools.Text.ToString().Trim() + "%' ";
            dv.RowFilter = SelectK;
            //DataRow[] rows = schoolsDT.Select(SelectK);
            //DataTable dt = dv.ToTable();
 DataTable dtn = dv.ToTable();
        
               
                this.cmbSchools.Items.Clear();

                this.cmbSchools.DataSource = dtn;
                this.cmbSchools.TextField = "sch_name";
                this.cmbSchools.ValueField = "school_id";
                this.cmbSchools.DataBind();

               return SelectK + "::::6666666::::" + schoolsDT.Rows.Count;
          

        }
liujun4755的主页 liujun4755 | 初学一级 | 园豆:166
提问于:2013-12-02 15:54
< >
分享
最佳答案
0

js 中的SchoolsChange()方法在什么情况下调用? 如果没有则只会在页面第一次加载时会调用,之后因为没有事件触发来调用这个方法所以只调用了一次

收获园豆:25
Zery | 大侠五级 |园豆:6069 | 2013-12-02 16:01

onkeyup="SchoolsChange()" ,有调用,但是显示的结果都是一样的,第一次初始化的时候的值

liujun4755 | 园豆:166 (初学一级) | 2013-12-02 16:06

@liujun4755: 

你要取的值是用js 取的还是通过<%#SchoolsChange()%>这样到后台中去取值的,另外如果<%#SchoolsChange()%>这种方式后台可以取到改变的值吗?应该是不可以的,需要提交表单。你验证一下~

Zery | 园豆:6069 (大侠五级) | 2013-12-02 16:12

@Zery: a=" <%=SchoolsChange()%>用这种方式调用,然后用后台取值,但是我不想页面刷新,只是更改一个combox的数据源

liujun4755 | 园豆:166 (初学一级) | 2013-12-02 16:52

@liujun4755: 还有一种可行的方法就是用异步去处理,只是每次触发事件都会发一个异步请求。与文本框自动补全的功能是一样的

Zery | 园豆:6069 (大侠五级) | 2013-12-02 16:56
其他回答(5)
0

其实a=" <%=SchoolsChange()%>";这样写的话编译到HTML里面就是a='xxx' 下次调用JS不会调用后台代码的 不信你打个断点试试

收获园豆:10
丫的 | 园豆:1575 (小虾三级) | 2013-12-02 16:21

的确是的,那应该怎样调用可以做到实时的,前台调用后台?

支持(0) 反对(0) liujun4755 | 园豆:166 (初学一级) | 2013-12-02 16:50
0

在你的js方法 function SchoolsChange() 中生成一个 request 去服务器请求资源。

请一定要记住,你的 js 是运行在客户端的。

 

收获园豆:1
Launcher | 园豆:45045 (高人七级) | 2013-12-02 17:52
0

还是用Ajax去后台执行吧~

收获园豆:1
幻天芒 | 园豆:36594 (高人七级) | 2013-12-02 17:53
0

js是没办法直接与后台交互的,用Ajax请求吧

收获园豆:1
拾梦小侠ด้้้ | 园豆:748 (小虾三级) | 2013-12-02 21:48
0

html已经被发送到客户端,连接断开,如何怎么调用呢?用ajax在发一次请求吧。

收获园豆:2
水晶途途 | 园豆:1434 (小虾三级) | 2013-12-03 11:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册