# 筆記_UploadFile_用原始HTML標籤 ---- ###### tags: `web form` `檔案上傳` 引用: [用request.files实现异文件上传【开放式上传】](https://blog.csdn.net/WuLex/article/details/76501952) [C# - Postback生命週期](http://e-troy.blogspot.com/2014/04/c-postback.html) [Uploading Files in ASP.net without using the FileUpload server control](https://stackoverflow.com/questions/569565/uploading-files-in-asp-net-without-using-the-fileupload-server-control) --- - 注意的地方 - Request.Files 與 Context.Request.Files的不同 > - Form > - Button > - 事件 - Form > - FormASP > - FormHTML > - runat="server": runat就是在server上執行編譯的過程 - Button&事件 ## 注意的地方 這位講的都是正確的 但實際上做出 **上傳檔案**是在Page_load上是有問題的 **form** 使用原本HTMLTag時當然要加上 - Http方式 - 編碼類型 - 送去哪裡 `method="post" enctype="multipart/form-data" action="Test4.aspx"` --- **Button** 如果用HTML_Button的話 有兩件事要注意 > **ASP.NET是事件驅動** > **要如何讓.aspx.cs邏輯程式去 抓到前面的事件觸發!??** > > \^上面這句是重點\^ --- **Event** 如何給元素加上事件? [C# - Postback生命週期](http://e-troy.blogspot.com/2014/04/c-postback.html) --- ## Form 首先先看Form 在原本的ASPTag中只有 ### FormASP ```C# <form id="form1" runat="server"> <div> <asp:ImageButton ID="ImageButton1" runat="server" /> <asp:FileUpload ID="FileUpload1" runat="server" AllowMultiple="True" /> <asp:Button ID="Button1" CssClass="submitbtn" runat="server" Text="送出" OnClick="Button1_Click" /> <br /> </div> </form> ``` **`runat="server"` ** 幫我們做掉很多東西 ## FormHTML ```C# <form id="form1" method="post" enctype="multipart/form-data" action="Test4.aspx"> <div> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label> <input id="File1" name="File1" type="file"/> <input id="Button1" type="submit" runat="server" onServerClick="ServeSideEvent" value="button" /> </div> </form> ``` 這時會會發現 Form 的確有 Submit 也放入了 `action="Test4.aspx` 但程式似乎就是沒進入到.aspx.cs 按下Button後因為`IsPostBack` 所以是不會出現Hello User - F12沒有Response.aspx.cs > 1. 因為程式連出去都沒出去 不然會進Page_load > 2. 就算是正常的 ASP.Net 也已經把Response做掉了!! **不正常** 下的ASP.Net顯示結果  **正常**下的ASP.Net顯示結果(沒有Hello User, end先不要看)  ## runat="server" **runat就是在server上執行編譯的過程** 瀏覽器(Browser)會用Get方式向Server取得第一次載入的資料 此時Page屬性IsPostBack=false; 後執行Page_Load程式。 之後當Browser觸發了一個按鈕Button後,不管這按扭元件的底下有沒有陳述句,ASP.net會Post的方式重新導向然後執行一次Server端程式碼,IsPostBack會變更為true。 **當使用者在瀏覽器(Browser)按下了一個按鈕,不管按鈕有沒有寫程式碼,程式預設會利用Post的方式重新導向再次執行一次Server端的程式碼。此時IsPostBack=true。** 在Form上加入 `runat="server"` 就可以進入Page_load  --- --- ## Button&事件 事件處理程式 onServerClick 一定要有 runat="server" 1. runat="server" 2. onServerClick="ServeSideEvent" 如果form中有runat="server" 標籤 加上onServerClick 不會抱錯 但是不會觸發Click事件 ```C# <input id="Button1" type="submit" runat="server" onServerClick="ServeSideEvent" value="button" /> ``` 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up