好久没看到过问这种问题的了......
问这个问题的一般都是asp.net的,那些服务器控件确实使得程序员连web程序的运行过程,还有服务端与客户端都分不清楚了
js代码是浏览器执行的,C#代码时服务器执行的,都不在一台电脑上运行,你还想互相调来调去......js代码想调C#函数,必须进行通讯,要么提交表单,要么ajax,但这也不是js在调用,只是发出请求,传递一些参数,服务端根据这些参数决定执行某个函数,将返回值发送给客户端;C#调js函数也一样,只能是往客户端发送一些数据,然后客户端获取到后根据这些数据决定执行哪些代码我自己开始也是做asp.net,可惜当时没人对我说这番话,现在想来也走过不少弯路

解决方案 »

  1.   

    我怎么会分不清服务器和客户端。。这个情况我说的很清楚,你还看不明白。现在是我在客户端用JS做了修改后,后台不知道我做了哪些改动,但JS知道。所以C#后台才要通过JS来获取数据明不明白啊怎么会不明白我的意思。。
      

  2.   

    现在页面上有个用gridview生成的table,里面有很多数据,在客户端,用户对这个表进行增行,删行,
    修改了里面的值,等操用。但后台不知道客户端做了这些操作。我在后cs的文件里有一个方法,就是把
    这个表里的数据提交给数据库,问题来了,用JS修改的东东,获取不到,不能正确的把客户端的修改写
    进数扰库
    但是以下的JS函数可以获取客户端修改后的数据,所以想用以下的函数返回值给这个cs里的方法,再把这个
    值写进数据库 
     function bb()
      {
        
          var Grid1=document.getElementById ("GridView2")
          var aa=Grid1.rows[0].cells[0].getElementsByTagName("input")[0].value
         return
      }   
    这个是JS函数,可以获得table第一个单元格的值,
      

  3.   

    MSScriptControl.dll,现在好像这个DLL可以实现,但我不知道怎么用这个DLL
      

  4.   

    既然是在客户端做的修改,不进行通讯服务端怎么可能知道.就这你还认为你分清了服务器和客户端? 你要是分清了就不会问出这种问题.算了这种原理性的东西,理解就是理解,不理解也不能说得你理解,等你摆脱服务器控件使用ajax后就会明白了.
    说点你明白的吧,有很简单的方法,就是用服务器控件,把你需要传递的值赋给一个服务器控件的某个属性(服务器控件支持的属性),然后就可以在C#中获取了;
    比如你在html中写一个
    <input style='display:none;' id='param1' runat="server" />
    然后 js中 document.getElementById('param1').value="test1";
    然后C#中  string str1=param1.Value;
    这样就行了,C#获取到该值
      

  5.   

    js:写个函数将要取的值放入一个hidden的控件
    C#:调用js函数,然后去取控件的值
      

  6.   

    使用Ajax发个请求就可以了,不需用也无法调用客户端的JS。楼上那位兄弟的话虽然有点尖锐但是事实。建议试下用PHP或Java来写下网站,那样你对Web的理解会更深一些
      

  7.   

    我说提直一点吧。我现在页面上有个TABLE的表,这个表里有什么值,如产品代码,产品名称,单位,数量,单价,金额。我在页面上做一个服务器的按钮,在这个按钮里写代码(也就是在CS)写,我要怎么才能把这个数据保存到数据库里,
      

  8.   

    这个TABLE里会有很多数据,,几仟条吧
      

  9.   

    适合你的方法:给table加上一个id,并保证有runat="server",这样id就是该服务器控件在C#中的变量名,table的行列单元格都可以通过该变量访问,可以通过循环轻易获取到值;更傻瓜式的方法,使用服务器控件GridView,直接可以绑定数据库
      

  10.   

    加runat="server"后也不能获取到表格里面的数据, 服务器端能获取到数据必须要视图状态或者表格里面的数据放input等表单域中. 楼主的table如果是datagrid或者gridview之类的服务器端控件,要在服务器端获取表格里面的数据,这样的例子比较多. 我想楼主的Table应该不会是datagrid等服务器控件, 这个时候在服务器端要获取表格的数据需要通过js获取数据然后提交到服务器,C#才能操作提交上来的数据, 当然如果你的表格里面的数据都在input之类的表单域里面,且都有name数据, 直接提交表单后台也能获取到数据. 这些原理都是web开发最基本的, 没搞清楚这些做web开发基本寸步难行
      

  11.   

    楼主说通过C#调用js函数, 这个想法是完全错误的,是根本没理解Web开发模式才会有这样的想法.js是运行在客户端的脚本,c#是运行在服务器端的代码, 两者只能建立通讯后才能传递数据,根本不存在js调用c#函数,c#调用js函数, js可以操作C#输出到客户端结果, c#可以处理js提交上来的数据,仅此而已.
      

  12.   

    楼主没分清楚Request和Response,只能从客户端发送Request到服务端,服务端响应后输出Response给客户端。服务端永远是被动的,c#编写的代码是运行在服务端的,怎么能从服务端主动抓取客户端的东西呢。
      

  13.   

    服务器端调用客户端的数据必须要提交,提交方式很多了,表单,ajax,script等什么的。。无刷新就用ajax提交,具体怎么用自己找资料看了
      

  14.   


    ajax是干嘛用的呢?
    post 是干嘛用的呢?
    服务器控件是干嘛用的呢?
    另外你会用什么方式呢?
      

  15.   

    请教问题应该虚心啊,楼主这态度很强硬嘛!楼主确实不能分清客户端和服务器端。
    “服务器的按钮”?任何控件最后都是生成了HTML+CSS+JS,都是通过浏览器向服务器发送请求和数据,服务器才能处理。如果不是有视图状态,你根本不能通过GridView1.XXX的方式获取到数据。每次请求都是独立的,没有状态的。只要网页发送到了客户端,跟服务器就没关系了。
    服务器不能主动调用客户端方法,也不能主动从客户端获取数据,你可以把修改后的数据提交到服务器不就行了么,只要你懂得一点Request
      

  16.   


    搞个客户端按钮,添加个js事件,用ajax提交到服务器端,全部修改。
      

  17.   

    兄弟是这样的
    客户端JS:
        <script type="text/javascript">
            window.Save = function () {
                var title = document.getElementById("Text_Title").value;
                var lb = document.getElementById("Text_Lb").value;
                var info = document.getElementById("Text_Info").value;
                location.href = "AddInfo.aspx?title='" + title + "'&lb='" + lb + "'&info=" + info;
                
            };
         
        </script>
    后台cs: protected void Page_Load(object sender, EventArgs e)
            {
                string title=Request.QueryString["title"];
                string lb = Request.QueryString["lb"];
                string info = Request.QueryString["info"];
                string result = title + lb + info;
            }
      

  18.   

    private void button1_Click(object sender, EventArgs e)
            {
                string path = AppDomain.CurrentDomain.BaseDirectory + "xxx.js";
                
                string str2 = File.ReadAllText(path);            string fun = string.Format(@"JS函数('{0}','{1}')", "参数","参数");
                            string result = ExecuteScript(fun, str2);
               
                MessageBox.Show(result);          
                
            }        private string ExecuteScript(string sExpression, string sCode)
            {
                MSScriptControl.ScriptControl scriptControl = new MSScriptControl.ScriptControl();
                scriptControl.UseSafeSubset = true;
                scriptControl.Language = "JScript";
                scriptControl.AddCode(sCode);
                try
                {
                    string str = scriptControl.Eval(sExpression).ToString();
                    return str;
                }
                catch (Exception ex)
                {
                    string str = ex.Message;
                }
                return null;
            }
      

  19.   

    上面代码需要安装msscript.ocx控件,添加引用Windows Script Control
      

  20.   

    楼主的问题解决了么,我也遇到差不多的问题了,想做个模拟登录12306,结果其中有个函数被他们的动态JS文件加密了,也就是说我写的CS文件要动态的读取并调用那个JS文件,然后将口令传给这个动态JS文件,然后将它加密并得到加密的值。