1、选择上传文件的保存路径;
2、选择上传文件;
3、开始上传文件,显示上传进度条;
4、根据已经上传的文件,对文件进行下载权限设定。
5、完成。
这个步骤看上去是很合理的,但中间有一个小问题就是,对于大文件上传时,第3步与第4步中间可能要等待很长时间。这样,老板要求重新选择顺序。
1、选择上传文件的保存路径;
2、选择上文件;
3、选择用户下载文件,即下载权限设定;
4、开始上传,显示上传进度条;
5、显示完成信息。
这是个很头痛的问题,因为一但选择了文件后,下一个动作就必须上传文件,否则所以的回调操作都将引发文件上传任务,而且就算你不显示上传进度条也一样的要等很长时间。这一问题我在Google的博客园里寻求过帮助,可没有好的解决方案。唯一可行的就是用JS在客户端实行大量的操作。
正巧,昨天看到MS的博客也开通了,于是也申请了一个。发现它的信息更新就是在一个Page里,而且只有最后一个提交才进行数据更新,其它的都是在本地完成的。于是想起利用MS的Web Controls里的MultiPage来做这样的工作。
这一套组件可以在MS的网站上下载到,而且MSDN上也有它使用的说明。但结于MultiPage的使用说的不多。特别是动态的添加页面,更是没有。只好自己做了。
然而VS.net2003对这一组件的支持并不完美。最郁闷的是在MultiPage里添加ViewPage,只能在代码模式下添加,不能用设计视图。想办法,先在MultiPage外做好内容,然后Cut到MultiPage里去,结果郁闷的是,事件都没了!又只好自己手动的添加。。。郁闷。。。
整个设计过程也并不难,但最郁闷的还是添加用户的下载权限,因为不能回调服务器函数,因此所有的功能都要在客户端完成。
这里最郁闷的是:User/Client及后面StartDate及EndDate的数据是在客户端用JS添加进去的,而当上传文件后,在服务器端取得不到这里面的数据。。。。。。
因为这个原因,上次准备这样一个解决方案的时候就放弃了。
然而,现在不得不完成这样的功能。怎么办???想到一个办法:就是隐藏一个文本框,然后添加数据,最后再恢复数据,结果JS代码一大堆:
function AddNewUser(o_objUserName,i_objUserName,o_objStartDate,i_objStartDate,o_objEndDate,i_objEndDate,h_objUserID,h_objStartDate,h_objEndDate,h_objUserNames)
{
//window.status = "Click the button.";
//o_objUserName: Dropdown list
//o_objEndDate,o_objStartDate: Text box
//i_objUserName,i_objEndDate,i_StartDate: List box
o_objUserName = eval("document.all."+o_objUserName);
o_objStartDate = eval("document.all."+o_objStartDate);
o_objEndDate = eval("document.all."+o_objEndDate);
i_objUserName = eval("document.all."+i_objUserName);
i_objStartDate = eval("document.all."+i_objStartDate);
i_objEndDate = eval("document.all."+i_objEndDate);
h_userID = eval("document.all."+h_objUserID);
h_startDate = eval("document.all."+h_objStartDate);
h_endDate = eval("document.all."+h_objEndDate);
h_userName = eval("document.all."+h_objUserNames);
//if(o_objStartDate.value==""||o_objEndDate.value=="") return;
//window.status = o_objStartDate.value;
var m_nameValue = o_objUserName.options[o_objUserName.selectedIndex].value;
if(m_nameValue=="-1"||m_nameValue=="0")return;
var m_nameText = o_objUserName.options[o_objUserName.selectedIndex].text;
var m_startDate = o_objStartDate.value;
var m_endDate = o_objEndDate.value;
var m_optionName = new Option(m_nameText,m_nameValue,false,false);
var m_optionStart = new Option(m_startDate,m_startDate,false,false);
var m_optionEnd = new Option(m_endDate,m_endDate,false,false);
i_objUserName.options[i_objUserName.length] = m_optionName;
i_objStartDate.options[i_objStartDate.length] = m_optionStart;
i_objEndDate.options[i_objEndDate.length] = m_optionEnd;
i_objUserName.size = i_objUserName.length+1;
i_objStartDate.size = i_objStartDate.length+1;
i_objEndDate.size = i_objEndDate.length+1;
//Set hiden data
h_userID.value += m_nameValue+"|";
h_startDate.value += m_startDate+"|";
h_endDate.value += m_endDate+"|";
h_userName.value += m_nameText+"|";
}
而在服务器上,为了恢复数据:{
//window.status = "Click the button.";
//o_objUserName: Dropdown list
//o_objEndDate,o_objStartDate: Text box
//i_objUserName,i_objEndDate,i_StartDate: List box
o_objUserName = eval("document.all."+o_objUserName);
o_objStartDate = eval("document.all."+o_objStartDate);
o_objEndDate = eval("document.all."+o_objEndDate);
i_objUserName = eval("document.all."+i_objUserName);
i_objStartDate = eval("document.all."+i_objStartDate);
i_objEndDate = eval("document.all."+i_objEndDate);
h_userID = eval("document.all."+h_objUserID);
h_startDate = eval("document.all."+h_objStartDate);
h_endDate = eval("document.all."+h_objEndDate);
h_userName = eval("document.all."+h_objUserNames);
//if(o_objStartDate.value==""||o_objEndDate.value=="") return;
//window.status = o_objStartDate.value;
var m_nameValue = o_objUserName.options[o_objUserName.selectedIndex].value;
if(m_nameValue=="-1"||m_nameValue=="0")return;
var m_nameText = o_objUserName.options[o_objUserName.selectedIndex].text;
var m_startDate = o_objStartDate.value;
var m_endDate = o_objEndDate.value;
var m_optionName = new Option(m_nameText,m_nameValue,false,false);
var m_optionStart = new Option(m_startDate,m_startDate,false,false);
var m_optionEnd = new Option(m_endDate,m_endDate,false,false);
i_objUserName.options[i_objUserName.length] = m_optionName;
i_objStartDate.options[i_objStartDate.length] = m_optionStart;
i_objEndDate.options[i_objEndDate.length] = m_optionEnd;
i_objUserName.size = i_objUserName.length+1;
i_objStartDate.size = i_objStartDate.length+1;
i_objEndDate.size = i_objEndDate.length+1;
//Set hiden data
h_userID.value += m_nameValue+"|";
h_startDate.value += m_startDate+"|";
h_endDate.value += m_endDate+"|";
h_userName.value += m_nameText+"|";
}
Create UserIDs
而这样的做法感觉又不是很安全,但也没办法了,先这么做着吧。