2011-04-29 20 views
0

由於無法解決此問題的原因,我無法在此頁面上使用runat="server"屬性。如何使用沒有runat =「server」的表單處理ASP.NET中的文件上傳?

如何訪問使用常規<input type="file"...上傳的上傳文件?

This question涉及該問題(使用<input type="file"而不是<asp:FileUpload),但它們仍然runat = server。

類型的事情,我希望能夠acheive(服務器端,形式已經發布之後),包括:

  • if (MyInput.HasFile) ...
  • var fileName = MyInput.FileName;
  • var fullPathAndFile = MyInput.PostedFile.FileName;
  • var mimeType = MyInput.PostedFile.ContentType;

我確定所有這些東西都可以做ne,我只是習慣.NET爲我處理所有這些事情!

更新:下面有見地的意見後,我好像在一個奇怪的方式來做事...

我本來想找沿着線的東西:

HttpPostedFile file = Request.Files["myFile"]; 
//accessing the file without having the element itself being runat="server", e.g. manually through the Request. 
//(I know this doesn't work without runat="server", just an example to clarify my question) 

//if(MyFile.HasFile) ... 
if (file != null && file.ContentLength) ... 

//var fName = MyFile.FileName 
var fName = Path.GetFileName(file.FileName); 

但它似乎甚至需要runat="server"

+0

我在下面提供了一個答案,但爲什麼你想這樣做超出了我。即使你使用的是Html控件,你可以爲它提供服務器端邏輯的唯一方法就是通過添加runat =「server」... – IrishChieftain 2011-04-29 00:59:22

回答

1

這個問題似乎有點困惑。

首先,您在頁面上有另一個表單意味着什麼? ASP.NET頁面應該有一個窗體(有或沒有runat="server")。

這個措辭讓我覺得你有另一個問題應該首先解決。在ASP.NET頁面上擁有多個表單的有效原因是非常不尋常的。

但是,如果這是您真正需要的,那麼請將您的問題的ASP.NET標記移除,並將其替換爲HTML,因爲這與ASP.NET無關。

+0

我想我強調了這個問題的上傳部分太多 - 我更感興趣如何在後端處理文件,對HTML事物的興趣不大。 – elwyn 2011-04-29 00:36:42

+0

至於你什麼時候在頁面上有多個表單:主頁面佈局中的搜索表單+登錄表單(+隱藏註冊表單),然後是頁面內容本身中的另一個表單。 +也許過濾器表格來優化您的搜索/一些內容。我是否缺少關於網頁上沒有多個表單的問題?我的意思是,我知道你只能擁有一個runat =「server」的表單(除非你把它們包裝在我之前完成的 elwyn 2011-04-29 00:41:16

+0

@elwyn:我擔心你*錯過了什麼,是的。 ASP.NET有一個回傳機制,可爲您提供頁面上任意數量按鈕的個別回調方法。它被設計成這些都將被放置在一個單一的形式。就這個原因而言,你遇到的問題就是爲什麼單一表單最好的最好例子。多種形式也會限制您可以放置​​控件的位置,因爲您需要確保它們處於正確的形式。 – 2011-04-29 01:03:41

2

創建自定義HtmlForm控件和切換它和關閉如下:

定製HtmlForm控件:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 


namespace CustomForm 
{ 
    public class GhostForm : System.Web.UI.HtmlControls.HtmlForm 
    { 
     protected bool _render; 

     public bool RenderFormTag 
     { 
      get { return _render; } 
      set { _render = value; } 
     } 

     public GhostForm() 
     { 
      //By default, show the form tag 
      _render = true; 
     } 

     protected override void RenderBeginTag(HtmlTextWriter writer) 
     { 
      //Only render the tag when _render is set to true 
      if (_render) 
       base.RenderBeginTag(writer); 
     }  

     protected override void RenderEndTag(HtmlTextWriter writer) 
     { 
      //Only render the tag when _render is set to true 
      if (_render) 
       base.RenderEndTag(writer); 
     } 
    } 
} 

用法:

public partial class MyClass : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      GhostForm mainForm = new GhostForm(); 
      mainForm.RenderFormTag = false; 
      .....  
     } 
      // Upload your file, etc. 
     ..... 
    } 
+0

請問你能解釋一下這是什麼嗎?據我瞭解,它會創建一個被覆蓋的表單,您可以選擇不呈現'

'標記,是否正確?那我該如何上傳呢?我最終會得到一堆未包裹在表單標籤中的元素? – elwyn 2011-04-29 00:57:36

+0

正確。我很難理解這個問題;你最終如何以「另一種形式」結束? – IrishChieftain 2011-04-29 01:02:12

+0

這段代碼解決了頁面上第二個表單的問題(不管是什麼)...... – IrishChieftain 2011-04-29 01:03:35

相關問題