2014-09-02 57 views
1

我剛開始學習asp.net和c#。我在使用Post方法的表單中獲取PDF文件的文件名時出現問題。asp c#獲得PDF文件名

<div class="form" id="pnl_Form" style="display:block ;"> 
    <form id="form1" method="post" enctype="multipart/form-data" target="frmUpload" action="/include/ajax.aspx?op=upload" > 
     <div> 
      Step 1. Choose a PDF to be converted: <i>(File limit <%=Global.MaxFileSize %> MB)</i> 
      <div class="form-val">    
      <input type="file" id="file1" name="file1" class="txt" /> 
      </div> 
     </div> 


     <div class="form-btn"> <a href="javascript:void()" class="btn-green" onclick="upload()"><span style="padding:0px 50px 0px 45px;">Send</span></a></div> 
     <div class="clear"></div> 

    </form> 

    <iframe id="frmUpload" name="frmUpload" style="display:none"></iframe> 
</div> 

而PDF將被上傳並使用第三方轉換工具進行轉換。轉換完成後,我需要向用戶顯示上傳的PDF的名稱。

<div class="form" id="pnl_Success"> 
    <div class="form-text"> 
     <h4>Conversion Successfully!</h4> 

     <p>File name: <%= Request.Files[0].FileName %> </p> 

     <div class="form-btn" style="margin-left:20%;"> <a href="/account/uploadlist.html" class="btn-green"><span style="padding:0px 20px 0px 15px;">Go to download</span></a></div> 
     <br>  

    </div> 
</div> 

但是用Request.Files [0] .FileName,示出了以下錯誤:

索引超出範圍。必須是非負的並且小於 的大小。參數名稱:index

描述:在執行 期間發生未處理的異常當前Web請求。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.ArgumentOutOfRangeException:索引出了 範圍。必須是非負值且小於 系列的尺寸。參數名稱:索引

但是,在CS代碼中,Request.Files [0]也在使用,PDF可以成功上傳。

private void Upload() 
{ 

    int fileId = 0; 
    int result = 0; 
    HttpPostedFile postFile = Request.Files[0]; 


    //user information 
    Account account = new Account(); 

    result = widget.Upload(postFile, out fileId) ; 

    if (result == (int)FileStatus.UploadSuccess) 
     Response.Write("<script language='javascript'>parent.convertProgress('" + fileId + "')</script>"); 
    else 
     Response.Write("<script language='javascript'>parent.failUpload(" + fileId + "," + result + ");</script>"); 
} 

我還試圖用一個靜態變量獲得postFile.FileName的值,並使用ASP的網頁而不是工作壓力太大調用值?

在類有:

 public static string showName; 

在上傳()函數有:

 showName = postFile.FileName; 

使用Javascript最後得到的文件名,但我還在尋找爲ASP解決方案。

+2

如果您使用的是asp.net,爲什麼不使用[''](http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols。 fileupload%28v = vs.110%29.aspx)控制? – freefaller 2014-09-02 07:08:55

+0

我會試試.... – Waq 2014-09-02 07:34:44

回答

0

好像你沒有在任何Request.Files [0]

這是錯誤發生的事情,它說你還沒有上傳任何東西。嘗試寫出Request.Files.Count來查看我的想法是否正確。

+0

它是0.我不明白,文件已經上傳,轉換完成,爲什麼Request.Files什麼都沒有? – Waq 2014-09-02 07:27:35

+0

轉換成功後,您是否重定向到新頁面?在這種情況下,您不會一起發送文件,因此Request.Files.Count將爲0 – Hejner 2014-09-02 11:46:22

+0

不,它位於同一頁面上。 URL永遠不會改變。 – Waq 2014-09-03 06:11:56

0

在ASP.NET表單中不能有HTML表單。這是您的爲空的原因。在ASP.NET表單中使用ASP.NET文件上傳控件,然後它將工作。

+0

但Request.Files在cs文件中工作,爲什麼它不在aspx頁面中工作? – Waq 2014-09-03 08:35:21

+0

向我們展示更多的代碼,所以我們可以看到代碼的哪個部分來自哪個文件,並且應該在什麼時候執行。爲什麼'文件名:<%= Request.Files [0] .FileName%>'在轉換後工作? – Alexander 2014-09-03 10:37:28