FineUI 官方论坛
标题:
关于ExtAspNet 上传出错,请sanshi看看,谢谢!
[打印本页]
作者:
の‵℡閊鳮﹌
时间:
2012-10-4 19:26
标题:
关于ExtAspNet 上传出错,请sanshi看看,谢谢!
string filename = FileUpload1.PostedFile.FileName;
string fileurl = filename.Substring(filename.LastIndexOf("\") + 1);
int i = filename.LastIndexOf(".");
string newext = filename.Substring(i);
string path = Server.MapPath("file");
if (newext != ".xls")
{
Alert.Show("文件格式不正确!");
}
else
{
path = path + "\" + fileurl;
FileUpload1.PostedFile.SaveAs(path);
string mystring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + path + "';Extended Properties=Excel 8.0;";
OleDbConnection cnnxls = new OleDbConnection(mystring);
OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls);
DataSet myDs = new DataSet();
myDa.Fill(myDs);
if (myDs.Tables[0].Rows.Count > 0)
{
string strSql = "";
conn.Open();
SqlCommand myCmd = null;
int kk = 0, nn = 0;
for (int k = 0; k < myDs.Tables[0].Rows.Count; k++)
{
if (CheckUserNumberIsExist(myDs.Tables[0].Rows[k]["工号"].ToString()))
{
if (CheckUserNnameIsExist(myDs.Tables[0].Rows[k]["姓名"].ToString()))
{
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)";
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() + "',";
strSql += "'" + myDs.Tables[0].Rows[k]["角色"].ToString() + "','" + SelectId(myDs.Tables[0].Rows[k]["组别"].ToString()).ToString() + "','" + myDs.Tables[0].Rows[k]["技能"].ToString() + "','2',";
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() + "')";
try
{
myCmd = new SqlCommand(strSql, conn);
myCmd.ExecuteNonQuery();
kk++;
}
catch
{
nn = kk + 1;
Alert.Show("第" + nn.ToString() + "行数据导入失败.");
}
}
else
{
nn = kk + 1;
Alert.Show("第" + nn.ToString() + "行数据姓名" + myDs.Tables[0].Rows[k]["姓名"].ToString() + "已存在,操作停止!");
return;
}
}
else
{
nn = kk + 1;
Alert.Show("第" + nn.ToString() + "行数据工号" + myDs.Tables[0].Rows[k]["工号"].ToString() + "已存在,操作停止!");
return;
}
}
Alert.Show("已成功插入" + kk.ToString() + "条数据");
conn.Close();
File.Delete(path);
// 2. 关闭本窗体,然后刷新父窗体
PageContext.RegisterStartupScript(ActiveWindow.GetHideRefreshReference());
}
}
复制代码
代码如上,最后提示如下:
Ext.Ajax.request({
form: theForm.id,
url: url,
isUpload: X.form_upload_file,
//params: serializeForm(theForm) + '&X_AJAX=true',
success: function (data) {
// see: http://extjs.com/forum/showthread.php?t=8129
// 如果页面中有FileUpload,responseObj.responseText会包含于 <pre>标签。
var scripts = data.responseText;
if (scripts) {
// 已经经过encodeURIComponent编码了,在ResponseFilter中的Close函数中
var prefix = scripts.substr(0, 4);
if (prefix.toLowerCase() === '<pre') {
//scripts = scripts.substr(5, scripts.length - 11);
//scripts = decodeURIComponent(scripts.replace(/<\/?pre>/ig, ''));
scripts = scripts.replace(/<\/?pre[^>]*>/ig, '');
scripts = decodeURIComponent(scripts);
}
//eval(scripts);
new Function(scripts)(); //提示语法错误
}
X.ajaxReady();
},
复制代码
查过网上的一些解释,某些只在IE6的时候上传错误,我这个是用IE8的。网上有解决方法,但我还不知道是否是这个错误。
附网上搜索到的情况:
ExtAspNet IE6 上传出错的解决方案
修改 Business/ResourceManager/ResponseFilter.cs
将 Close()方法中的
// 文件上传,此时应该对返回的数据进行编码,因为ExtJs会将返回的数据放在<pre></pre>中,导致自定编码
if (HttpContext.Current.Request.ContentType.Contains("multipart/form-data"))
{
// HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号,而客户端的 encodeURIComponent 则是将空格转换为 %20
responseText = HttpUtility.UrlEncode(responseText);
responseText = responseText.Replace("+", "%20");
}
修改为
// 文件上传,此时应该对返回的数据进行编码,因为ExtJs会将返回的数据放在<pre></pre>中,导致自定编码
if (HttpContext.Current.Request.ContentType.Contains("multipart/form-data"))
{
// HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号,而客户端的 encodeURIComponent 则是将空格转换为 %20
responseText = HttpUtility.UrlEncode(responseText);
responseText = responseText.Replace("+", "%20");
responseText = "<pre>" + responseText + "</pre>";
}
其中红色代码行为新添加的。
在IE6上出错的原因是,上传事件触发后,页面会接收返回结果,,ResourceManager在执行Page_PreRenderComplete的时候HttpContext.Current.Response.ContentType = "text/plain";这句将返回内容解析为源代码并由X.ajax.js中的new Function(scripts)();解析成JS代码,而在IE6上,返回结果会因为格式错误而出错,导致new Function(scripts)();时出错。
该解决方案应该算是一种技巧的解决方式,因为有上传控件时,本身Ext就会在返回结果中添加<pre>标记,程序在执行过程中会删除此标记。在修改上坚持尽量少的更改。
以上解决方案已在实际项目中验证通过,没有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