none
关于前台页面用javascript调用后台c#代码 RRS feed

  • 问题

  • 我在后台的c#代码里写了一个函数
    如:
    public void addivtrue()
    {
       textbox.Enabled = false;
    }

    然后我在前台页面中写上如下这些:
    <a  onclick="<%addivtrue();%>"  style=" cursor:pointer">
    <img src="images/default.gif" width="156" height="45" alt="" ></a>


    为什么单击那个图片,页面上的textbox控件的Enabled没有被设成:false
    2009年4月27日 0:28

答案

  • 这样是肯定不行的,如果你仅仅只需要将输入框置为不可输入状态,为什么一定要提交到服务端去完成?
    直接通过JavaScript操作DOM不就可以解决吗?
    function disabledTextBox() {
       document.getElementById("textbox").disabled = "disabled";
    }

    <a  onclick="disabledTextBox();"  style=" cursor:pointer">
    <img src="images/default.gif" width="156" height="45" alt="" ></a>


    Wright
    2009年4月27日 1:41

全部回复

  • 这样是肯定不行的,如果你仅仅只需要将输入框置为不可输入状态,为什么一定要提交到服务端去完成?
    直接通过JavaScript操作DOM不就可以解决吗?
    function disabledTextBox() {
       document.getElementById("textbox").disabled = "disabled";
    }

    <a  onclick="disabledTextBox();"  style=" cursor:pointer">
    <img src="images/default.gif" width="156" height="45" alt="" ></a>


    Wright
    2009年4月27日 1:41
  • 楼主,你好,Wright Jin 的建议比较好,如果你真的有苦衷,可以参考:

    <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/images/default.gif" OnClick="ImageButton1" />

    protected void ImageButton1(object sender, EventArgs e)
    {
        textbox.Enabled = false;
    }
    jon.valett@gmail.com
    2009年4月27日 2:05
    版主
  • 服务器端代码是先执行的,使用ICallbackEventHandler 接口回调则非常简单。例子
    <%@ Page Language="C#" AutoEventWireup="true" %> 
     
    <%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
     
    <script runat="server">  
      public string GetCallbackResult()  
      {  
        return ret;  
      }  
      public void RaiseCallbackEvent(String eventArgument)  
      {  
        ret = "得到的客户端参数是:" + eventArgument + "\r\n" + "服务器端计算得到的参数:" + DateTime.Now.ToString();  
      }  
     
      string ret = "";  
     
     
      protected void Page_Load(object sender, EventArgs e)  
      {  
        ClientScriptManager cm = Page.ClientScript;  
        String cbReference = cm.GetCallbackEventReference(this, "arg", "ReceiveServerData", "");  
        String callbackScript = "function CallServer(arg, context) {" + cbReference + "; }";  
        cm.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);  
      }  
     
    </script> 
     
    <html xmlns="http://www.w3.org/1999/xhtml">  
    <head id="Head1" runat="server">  
    </head> 
    <body> 
      <form id="form1" runat="server">  
      </form> 
     
      <script type="text/javascript">  
        CallServer("客户端的参数");  
        function ReceiveServerData(arg, context) {  
          alert(arg)  
        }  
      </script> 
     
    </body> 
    </html> 
     

    【孟子E章】
    2009年4月27日 3:38
    版主
  • 因为从根本上来说,客户端不能够调用服务器端函数。任何一个Page生命周期,都一定是先服务器端处理,后客户端处理的。如果你要在客户端处理后再到服务器端处理,你至少需要两个Page生命周期,后面一个就是PostBack或者Ajax请求。

    如果你想要简单的解决方案,我建议你用ASP.NET AJAX的UpdatePanel好了,它能够将第二个Page生命周期用异步PostBack连接起来。
    Microsoft ASP.NET MVP
    2009年4月28日 3:53
    版主
  • 我觉得你的方法不是很好,如果只是要Enable textbox控件的话,只需要用javascript的dom就可以了。

    像Wright Jin说的一样,代码也很简单。

    var c = document.getElementById(id);
    c.style.visable="null"

    我觉得前端最好用js实现,C#做一下逻辑处理还不错,否则会降低页面效率的。

    低调,低调
    2009年4月28日 7:02
    版主