FineUI 官方论坛

标题: 关于ExtAspNet 上传出错,请sanshi看看,谢谢! [打印本页]

作者: の‵℡閊鳮﹌    时间: 2012-10-4 19:26
标题: 关于ExtAspNet 上传出错,请sanshi看看,谢谢!
  1. string filename = FileUpload1.PostedFile.FileName;
  2.         string fileurl = filename.Substring(filename.LastIndexOf("\") + 1);
  3.         int i = filename.LastIndexOf(".");
  4.         string newext = filename.Substring(i);
  5.         string path = Server.MapPath("file");
  6.         if (newext != ".xls")
  7.         {
  8.             Alert.Show("文件格式不正确!");
  9.         }
  10.         else
  11.         {
  12.             path = path + "\" + fileurl;
  13.             FileUpload1.PostedFile.SaveAs(path);
  14.             string mystring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + path + "';Extended Properties=Excel 8.0;";
  15.             OleDbConnection cnnxls = new OleDbConnection(mystring);
  16.             OleDbDataAdapter myDa = new OleDbDataAdapter("select  *  from  [Sheet1$]", cnnxls);
  17.             DataSet myDs = new DataSet();
  18.             myDa.Fill(myDs);

  19.             if (myDs.Tables[0].Rows.Count > 0)
  20.             {

  21.                 string strSql = "";
  22.                 conn.Open();
  23.                 SqlCommand myCmd = null;
  24.                 int kk = 0, nn = 0;
  25.                 for (int k = 0; k < myDs.Tables[0].Rows.Count; k++)
  26.                 {
  27.                     if (CheckUserNumberIsExist(myDs.Tables[0].Rows[k]["工号"].ToString()))
  28.                     {
  29.                         if (CheckUserNnameIsExist(myDs.Tables[0].Rows[k]["姓名"].ToString()))
  30.                         {
  31.                             strSql = "insert into OT_user_table (u_Labor_number,u_password,u_name,u_team,u_type,u_c_id,u_jn,u_zg,u_qy,u_yewuy,u_zx_id,u_work,u_phone)";
  32.                             strSql += " values('" + myDs.Tables[0].Rows[k]["工号"].ToString() + "','" + myDs.Tables[0].Rows[k]["密码"].ToString() + "','" + myDs.Tables[0].Rows[k]["姓名"].ToString() + "','" + myDs.Tables[0].Rows[k]["组别"].ToString() + "',";
  33.                             strSql += "'" + myDs.Tables[0].Rows[k]["角色"].ToString() + "','" + SelectId(myDs.Tables[0].Rows[k]["组别"].ToString()).ToString() + "','" + myDs.Tables[0].Rows[k]["技能"].ToString() + "','2',";
  34.                             strSql += "'" + Select_Qy(myDs.Tables[0].Rows[k]["组别"].ToString()).ToString() + "','1','" + SelectTeam_Id(myDs.Tables[0].Rows[k]["组别"].ToString()).ToString() + "','" + myDs.Tables[0].Rows[k]["是否在职"].ToString() + "','" + myDs.Tables[0].Rows[k]["联系电话"].ToString() + "')";

  35.                             try
  36.                             {                                
  37.                                 myCmd = new SqlCommand(strSql, conn);
  38.                                 myCmd.ExecuteNonQuery();
  39.                                 kk++;
  40.                             }
  41.                             catch
  42.                             {
  43.                                 nn = kk + 1;
  44.                                 Alert.Show("第" + nn.ToString() + "行数据导入失败.");
  45.                             }
  46.                         }
  47.                         else
  48.                         {
  49.                             nn = kk + 1;
  50.                             Alert.Show("第" + nn.ToString() + "行数据姓名" + myDs.Tables[0].Rows[k]["姓名"].ToString() + "已存在,操作停止!");
  51.                             return;
  52.                         }
  53.                     }
  54.                     else
  55.                     {
  56.                         nn = kk + 1;
  57.                         Alert.Show("第" + nn.ToString() + "行数据工号" + myDs.Tables[0].Rows[k]["工号"].ToString() + "已存在,操作停止!");
  58.                         return;
  59.                     }

  60.                 }

  61.                 Alert.Show("已成功插入" + kk.ToString() + "条数据");
  62.                 conn.Close();
  63.                 File.Delete(path);
  64.                 // 2. 关闭本窗体,然后刷新父窗体
  65.                 PageContext.RegisterStartupScript(ActiveWindow.GetHideRefreshReference());
  66.             }

  67.         }
复制代码
代码如上,最后提示如下:
  1. Ext.Ajax.request({
  2.                 form: theForm.id,
  3.                 url: url,
  4.                 isUpload: X.form_upload_file,
  5.                 //params: serializeForm(theForm) + '&X_AJAX=true',
  6.                 success: function (data) {
  7.                     // see: http://extjs.com/forum/showthread.php?t=8129
  8.                     // 如果页面中有FileUpload,responseObj.responseText会包含于 <pre>标签。
  9.                     var scripts = data.responseText;
  10.                     if (scripts) {
  11.                         // 已经经过encodeURIComponent编码了,在ResponseFilter中的Close函数中
  12.                         var prefix = scripts.substr(0, 4);
  13.                         if (prefix.toLowerCase() === '<pre') {
  14.                             //scripts = scripts.substr(5, scripts.length - 11);
  15.                             //scripts = decodeURIComponent(scripts.replace(/<\/?pre>/ig, ''));
  16.                             scripts = scripts.replace(/<\/?pre[^>]*>/ig, '');
  17.                             scripts = decodeURIComponent(scripts);
  18.                         }
  19.                         //eval(scripts);
  20.                         new Function(scripts)(); //提示语法错误
  21.                     }
  22.                     X.ajaxReady();
  23.                 },
复制代码


查过网上的一些解释,某些只在IE6的时候上传错误,我这个是用IE8的。网上有解决方法,但我还不知道是否是这个错误。
附网上搜索到的情况:
  1. ExtAspNet IE6 上传出错的解决方案
  2. 修改 Business/ResourceManager/ResponseFilter.cs
  3. 将 Close()方法中的
  4. // 文件上传,此时应该对返回的数据进行编码,因为ExtJs会将返回的数据放在<pre></pre>中,导致自定编码
  5. if (HttpContext.Current.Request.ContentType.Contains("multipart/form-data"))
  6. {
  7. // HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号,而客户端的 encodeURIComponent 则是将空格转换为 %20
  8. responseText = HttpUtility.UrlEncode(responseText);
  9. responseText = responseText.Replace("+", "%20");
  10. }
  11. 修改为
  12. // 文件上传,此时应该对返回的数据进行编码,因为ExtJs会将返回的数据放在<pre></pre>中,导致自定编码
  13. if (HttpContext.Current.Request.ContentType.Contains("multipart/form-data"))
  14. {
  15. // HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号,而客户端的 encodeURIComponent 则是将空格转换为 %20
  16. responseText = HttpUtility.UrlEncode(responseText);
  17. responseText = responseText.Replace("+", "%20");
  18. responseText = "<pre>" + responseText + "</pre>";
  19. }
  20. 其中红色代码行为新添加的。
  21. 在IE6上出错的原因是,上传事件触发后,页面会接收返回结果,,ResourceManager在执行Page_PreRenderComplete的时候HttpContext.Current.Response.ContentType = "text/plain";这句将返回内容解析为源代码并由X.ajax.js中的new Function(scripts)();解析成JS代码,而在IE6上,返回结果会因为格式错误而出错,导致new Function(scripts)();时出错。
  22. 该解决方案应该算是一种技巧的解决方式,因为有上传控件时,本身Ext就会在返回结果中添加<pre>标记,程序在执行过程中会删除此标记。在修改上坚持尽量少的更改。
  23. 以上解决方案已在实际项目中验证通过,没有ie6的童鞋可以安装IETester进行调试。
复制代码


请sanshi看看,谢谢!

作者: 朗动    时间: 2012-10-11 02:31
不知道 那里 问题呢
作者: 寒山寺    时间: 2012-10-11 06:26
点击上传,弹窗口,出个新页面,使用ASP.NET控件




欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/) Powered by Discuz! X3.4