当前位置:编程学习 > C#/ASP.NET >>

后台调用前台方法出现的问题?

后台代码:
protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write("<script type='text/javascript'>SetSum();</script>");
            string dd = Text1.Value;
        }
前台代码:
<script language="javascript" type="text/javascript">
     function SetSum()
       {                  
            document.getElementById('Text1').value="123123";//////给最后计算结果赋值                 
       }
</script>


可是在后台获取Text1值时,为什么一直是空呢? --------------------编程问答-------------------- 后台代码执行完毕后生成整个页面,然后传回客户端,js在客户端运行
所以Response.Write("<script type='text/javascript'>SetSum();</script>");
执行完毕后 SetSum没有被执行,自然取不到所谓更改后的值

另外建议用RegisterStartupScript,别用response.write输出脚本 --------------------编程问答-------------------- 为什么要这样做呐?直接在前台用JS计算并赋Text1值不行吗? --------------------编程问答-------------------- Text1.Value 既然在后台可以访问到
那么还是在后台写个方法吧,而无需在调用前台的JS把 --------------------编程问答--------------------

<script language="javascript" type="text/javascript">
  function SetSum()
  {  
  document.getElementById('Text1').value="123123";//////给最后计算结果赋值  
  }
</script>

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click"  OnClientClick="SetSum()"/>


protected void Button1_Click(object sender, EventArgs e)
  {
  string dd = Text1.Value;
  }

  这样 不就行了嘛。。。。 你为什么要那么写呢。。。 --------------------编程问答-------------------- 方法1:非要后台赋值:
服务器端控件外加上updatepannel
(或者服务器端的 OnClientClick)
方法2:客服端赋值 服务器取值
    前台:  <asp:Button ID="Button1" runat="server" Text="取值"   OnClick="Button1_Click" />
        <input id="Button2" type="button" value="赋值"  onclick="SetSum();"/>
        <asp:TextBox ID="Text1" runat="server"></asp:TextBox> 
            <script language="javascript" type="text/javascript">
  function SetSum()
  {   
  document.getElementById('Text1').value="123123";//////给最后计算结果赋值   
  }

后台:
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write("<script type='text/javascript'>SetSum();</script>");
        //ClientScript.RegisterStartupScript(this.GetType(), "aa", "SetSum();", true);
        string dd = Text1.Text;
        Response.Write(dd);
    } --------------------编程问答--------------------
引用楼主 zhangchuanliang 的回复:
后台代码:
protected void Button1_Click(object sender, EventArgs e)
  {
  Response.Write("<script type='text/javascript'>SetSum();</script>");
  string dd = Text1.Value;
  }
前台代码:
<script language="……


刷新页面了 Text1肯定是空的赛 --------------------编程问答-------------------- 直接写个JS不就OK了,按钮的客户端事件,OnClientClick="SetSum();"不就完事了?楼主是这个意思? --------------------编程问答-------------------- asp.net整个页面生命周期先搞清楚。什么先执行,什么后执行。后台还没执行完,HTML还没呈现,当然没值 --------------------编程问答-------------------- 调用前台方法可以用:
ScriptManager.RegisterStartupScript(this, this.GetType(), "SetSum()", true);

--------------------编程问答--------------------
引用 9 楼 chuxue1342 的回复:
调用前台方法可以用:
ScriptManager.RegisterStartupScript(this, this.GetType(), "SetSum()", true);

++1 --------------------编程问答-------------------- 太混乱了,服务器端怎么可能调用得到javascript --------------------编程问答-------------------- 参考:
CS是怎样调用js的方法:
http://www.cnblogs.com/insus/articles/1945539.html
或者:
http://www.cnblogs.com/insus/articles/1945582.html --------------------编程问答--------------------                 ClientScript.RegisterStartupScript(GetType(), "myscript", "<script>SetSum();</script>");
--------------------编程问答-------------------- 看下页面执行的生命周期吧 --------------------编程问答-------------------- 首先 第一你检查下你的写的 SetSum() 这个方法要放在BODY里 因为我估计你那个Text1 肯定是服务器控件

第二:对于取服务器控件ID 你应该使用

function SetSum()
  {  
  document.getElementById('<%=Text1.ClientID%>').value="123123";//////给最后计算结果赋值  
  }
  
--------------------编程问答-------------------- 刷新了哥们。 --------------------编程问答--------------------
引用 7 楼 shijie0375 的回复:
直接写个JS不就OK了,按钮的客户端事件,OnClientClick="SetSum();"不就完事了?楼主是这个意思?

是这个问题。请问大家,在后台调用js函数时,如何执行js函数,然后再执行后台代码???(因为我的这个项目是,在后台将控件赋值,然后调用js,js在根据控件的内容 做出一些处理后,再将处理后的结果赋值给某控件,然后后台 再取出最后处理的结果。)有人可能会说直接在后台处理不就行了吗? --------------------编程问答-------------------- 前台:
 <asp:Button ID="Button1" runat="server" Text="取值" OnClientClick="SetSum()" OnClick="Button1_Click" />


function SetSum()
{
//这里是客户端代码
if(true)
{
return true;//执行客户端事件后执行服务器端事件 Button1_Click
}
else
return true;//仅执行客户端事件


} --------------------编程问答-------------------- 刚才写错了 不好意思:

前台:
 <asp:Button ID="Button1" runat="server" Text="取值" OnClientClick="SetSum()" OnClick="Button1_Click" />


function SetSum()
{
//这里是客户端代码
if(true)
{
return true;//执行客户端事件后执行服务器端事件 Button1_Click
}
else
return false;//仅执行客户端事件


} --------------------编程问答--------------------
引用 19 楼 zxy397472251 的回复:
刚才写错了 不好意思:

前台:
 <asp:Button ID="Button1" runat="server" Text="取值" OnClientClick="SetSum()" OnClick="Button1_Click" />


function SetSum()
{
//这里是客户端代码
if(true)
{
return true;//执行客户端事件后执行服……

恩,可以这样,但是这样之后 ,后台并没有给控件赋值,然后就直接直接了js --------------------编程问答--------------------

路过~~~~~~~~ --------------------编程问答--------------------
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,