市委组织部项目--js调用后台方法(一)


   由来:对于下载word文档和预览文档,需要根据选中行获取这条记录的文档地址和文档名称,然后点击下载或预览,将需要的参数传到后台调用相应的方法。首先想到的就是通过js获取本行的值,作为参数传递到后台调用下载和预览的方法。


   以下是使用的两种方式调用后台的方法!

 


方法一:


js代码:


<script type="text/javascript">
        //下载
        function btnDownLoad() {
            var row = $('#dg').datagrid('getSelected');
            if (row) {
                //选中行的id,文档名称,文档地址
                var id = row.id;
                var name = row.wordName;
                var wordaddress = row.wordAddress;

                //createXMLHTTP(); //创建XMLHttpRequest对象  + "&wordaddress=" + wordaddress
                //var url = "QueryWord.aspx?name=" + name + "&wordaddress=" + wordaddress;

                //js跳转页
                //window.location.href = "QueryWord.aspx?name=" + name;

                //调用后台click方法
                //document.getElementById("btnLoad").click();

                var myurl = "UnitsQueryWord.aspx" + "?" + "name=" + name + "&wordaddress=" + wordaddress;
                document.getElementById("btnLoad").click();

                //var myurl = wordaddress;
                当跳转为文档的地址时,即实现下载
                window.location.assign(myurl);


            }
            else {
                alert('请选中一条记录进行修改');
                return;
            }
        }        
</script>

后台方法:


protected void btnLoad_Click(object sender, EventArgs e)
        {
            //string tableName = Request.QueryString["tableName"].ToString();
            string name = Request.QueryString["name"].ToString();
            string wordaddress = Request.QueryString["wordaddress"].ToString();           
            //DownloadFile(Server.MapPath("UpLoadWord/2013年度考核办法(2014-2-2修改稿)2.doc"), "2013年度考核办法(2014-2-2修改稿)2.doc");
            //DownloadFile(name,wordaddress);
        }

   

   

    这种方法未能实现,原因是这两条语句(

 var myurl = "UnitsQueryWord.aspx" +"?" + "name=" + name + "&wordaddress=" +wordaddress;

    document.getElementById("btnLoad").click();

)单独使用均没有问题但一起使用后台就获取不到前台传过去的值。如上图,如果将click事件去掉,点击下载时,参数已经在浏览器中显示。但是当加上click语句,相当于刷新一次界面,而我们知道窗体首次加载时肯定是无参数值的,所以后台会一直获取不到值,提示:未将对象引用到对象实例!

 

方法二:

 

js代码:


<script type="text/javascript"> 
//预览
function btnPreView() {
            var row = $('#dg').datagrid('getSelected');
            if (row) { 
				     //文档地址
                var wordaddress = row.wordAddress;
                var s = '<%=WordToHtml2("' + wordaddress + '") %>';
            }
        }
</script>

后台代码:

 

public string WordToHtml2(string  wordFileName)
        {
            if (wordFileName == null || wordFileName == "")
            { 
                string HtmlPath = WordToHtml(Server.MapPath(wordFileName));
                string rePath = HtmlPath.Substring(HtmlPath.IndexOf("UpLoadWord\\") + 11, HtmlPath.Length - HtmlPath.IndexOf("UpLoadWord\\") - 11);
                Response.Redirect("UpLoadWord/" + rePath);
                return "1";
            }
            return "2";
        }

      




    这种方法一般在有返回值时使用,如上的代码最终js代码中的变量s的值为2,也就是直接给我们结果(如上第一张图结果为“2”)。而且这个方法并不是触发什么事件时执行,而是窗体一旦加载就执行这个方法( var s ='<%=WordToHtml2("' + wordaddress + '") %>';

)因为窗体加载时wordAddress并没有值,固导致直接判断wordFileName是否等于wordAddress。

而且当我们加载完后点击“预览html”按钮时s的值已经为2。固这种方法仍不能满足要求!

 

总结:


   js调用后台的方法有多种,上面只是针对其中两种进行解释说明。当我们在网上搜的时候会看到多种方法,但是我们并不知道它是怎么实现的,只有自己真正使用,调试时才会真正了解它,如果我们对方法的实现不是很了解,那么就可能出现在这种情况下可以实现,在另一种情况下就不能实现而自己还不知道为什么。所以我们在学习时不能只想着功能的实现,而要真正理解它,那么这个知识才是自己的!

 

 



  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 43
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 43
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值