1.前台html代碼
要寫一個有id的form,可是不能有runat="server"屬性。由於一個頁面中,有這個屬性的form表單僅僅能有一個。
再要有一個有name的iframe,要設置它的樣式為不顯示。即display為none。
使用iframe的優點是。提交該表單,
不會刷新頁面,僅僅會刷新這個不可見的iframe。
把form表單的target設置為iframe的name值,form表單的 action設置為表單要提交到的處理程序。
這個處理程序中。會接收到form表單中全部有name屬性的控件的值,包括文件:
<input type="file" name="uploadfile" id="uploadfile" />
WebForm的文件要想上傳到server端,不能用.net本身的FileUpLoad控件,貌似是由於會遇到權限問題。無法解析。
所以,用本文所用的以表單的形式post過去,再在接收端用C#代碼:
var file = context.Request.Files[0]; var stream = file.InputStream;來獲得文件和文件流。
<form id="fileInfo" enctype="multipart/form-data" target="screct_frame" method="POST" action="../../Handlers/needsPlanCreateHandler.ashx?sign=readExcel">
<input type="file" name="uploadfile" id="uploadfile" />
<button class="btn btn-default" type="submit" >確定</button>
</form>
<iframe name="screct_frame" style="display: none;"></iframe>
2.一般處理程序代碼,即上面form所提交到的action端的處理代碼
private void ReadExcel(HttpContext context)
{
context.Response.ContentType = "text/html";
try
{
var file = context.Request.Files[0];
if (file.FileName == "")
{
context.Response.Write("<script>parent.callback('請先導入文件');</script>");
}
var stream = file.InputStream;
//這里能夠對文件流做些什么
}
catch (Exception ex)
{
context.Response.Write("<script>parent.callback(" + ex.ToString() + ");</script>");
}
}
說明:上面的parent.callback()這種方法,
callback()是iframe所在的頁面定義的js方法,前面使用parent時由於。
當前提交的是在iframe中,使用parent能夠獲得頁面對象,iframe能夠通過parent或top來找到父級頁面,
能夠運行父級頁面的js腳本。
