none
【JS/C#】js调用后台方法为什么会莫名其妙的执行? RRS feed

  • 问题

  • 操作系统XP 浏览器IE7,想做的功能是在上传按钮点击选择图片之后判断一下图片大小然后后台返回信息前台显示。但现在不知道为什么页面一执行就执行后台方法,另我很不解。代码如下:

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>无标题页</title>
        <style type="text/css">
        #preview_fake
        {
            filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);
        }
        </style>

        <script type="text/javascript">
        function perImg(o)
        { var agent=window.navigator.userAgent;
            var isIE7 = agent.indexOf('MSIE 7.0') != -1;
            var isIE8 = agent.indexOf('MSIE 8.0') != -1;

            if(isIE7 || isIE8)
            {
                alert('这就是IE7与IE8了');
               
                document.getElementById("preview").style.display="none";//隐藏img控件,利用滤镜在img控件中显示图片会存在遮挡
               
                //新的预览代码,支持 IE6、IE7。
                var newPreview = document.getElementById("preview_fake");
                newPreview.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = o.value;
                newPreview.style.width = "80px";
                newPreview.style.height = "85px";
               
                //var a = "<%=LoadImageSize()%>";  //LoadImageSize方法是后台调用的方法  问题就出在这里
                // alert(a); 

               
            }

    }

        </script>

    </head>
    <body>
        <form id="form1" runat="server" enctype="multipart/form-data" method="POST">
           <%-- <asp:ScriptManager ID="sm" runat="server" EnablePageMethods="true">
            </asp:ScriptManager>--%>
            <%--<asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>--%>
                    <br />
                    <div id="preview_fake" style="width: 80px; height: 85px; border: solid 1px #99BBE8;">
                        <img id="preview" style="width: 80px; height: 85px; border: 0px;" />
                    </div>
                    <br />
                    <input type="file" id="file" runat="server" onchange="perImg(this)" />
                <%--</ContentTemplate>
            </asp:UpdatePanel>--%>
        </form>
    </body>
    </html>

     

     

    后台代码如下:

    public partial class test : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
         
        }

        protected string LoadImageSize()
        {
          
            return "asdf";
             
        }

       
    }

     

    设置断点以后不知道为什么每次页面执行LoadImageSize方法都会执行。我的理解是 LoadImageSize 方法是在上传按钮的onchange事件perImg方法中,(即不执行perImg方法不会执行LoadImageSize方法),后来我把//var a = "<%=LoadImageSize()%>";  // alert(a); 这两行代码注销 后台方法还是会执行   

    我想请问一下大家,这是什么原因引起的?感谢!

     


    买海参选煜诚 煜诚海参 真心品质 http://jinweb.taobao.com
    • 已移动 孟宪会Moderator 2010年10月26日 12:37 (发件人:.NET Framework 一般性问题讨论区)
    2010年10月26日 3:05

答案

  • 在页面生成完成后,会将 var a = <%=LoadImageSize()%> 生成为 var a = "asdf"; 你可以查看网页的源代码看看生成的结果,这也可能是你理解有误的地方。


    知识改变命运,奋斗成就人生!
    2010年10月28日 1:19
    版主

全部回复

  • 你好!

    <%=LoadImageSize()%> 并不是在你触发事件时执行的,而是在页面初始化时(Render)就已经将结果生成好了。


    知识改变命运,奋斗成就人生!
    2010年10月27日 5:19
    版主
  • 你好!

    <%=LoadImageSize()%> 并不是在你触发事件时执行的,而是在页面初始化时(Render)就已经将结果生成好了。


    知识改变命运,奋斗成就人生!
    你好,是不是说后台方法如何放在js方法中,就不会遵循事件方法,而是遵循页面执行顺序执行呢?

    买海参选煜诚 煜诚海参 真心品质 http://jinweb.taobao.com
    2010年10月27日 16:36
  • 在页面生成完成后,会将 var a = <%=LoadImageSize()%> 生成为 var a = "asdf"; 你可以查看网页的源代码看看生成的结果,这也可能是你理解有误的地方。


    知识改变命运,奋斗成就人生!
    2010年10月28日 1:19
    版主