サンプル
モデル
Namespace Models Public Class DemoFileUpLoadModel Public Property UploadedFile As HttpPostedFileBase Public Property Remarks As String End Class Public Class DemoFileUpLoadResultModel Public Property IdAndNames As Dictionary(Of String, String) Public Property Remarks As String End Class End Namespace
コントローラ
DemoFileUpLoadController.vbImports System.IO Imports System.Web.Mvc Imports WebAppli.Models Namespace Controllers Public Class DemoFileUpLoadController Inherits Controller Public Function Index() As ActionResult Return View() End Function <HttpPost> <ValidateAntiForgeryToken()> Public Function UploadFile(ByVal model As DemoFileUpLoadModel) As ActionResult Dim resultModel = Me.GetResultModel(model) Return View(resultModel) End Function Private Function GetResultModel(ByVal model As DemoFileUpLoadModel) As DemoFileUpLoadResultModel Dim resultModel = New DemoFileUpLoadResultModel resultModel.Remarks = model.Remarks Dim uploadedFile = model.UploadedFile ' アップロード先のパスを生成 Dim upfile As String = Server.MapPath("~/App_Data/") _ & Path.GetFileName(uploadedFile.FileName) ' 同名のファイルが存在する場合はエラー If System.IO.File.Exists(upfile) Then ViewData("ResultMessage") = "同名のファイルが存在します。" Else ' 画像ファイルで同名のファイルが存在しない場合は保存処理 uploadedFile.SaveAs(upfile) ViewData("ResultMessage") = String.Format( "{0}をアップロードしました。", uploadedFile.FileName) Dim idAndNames = New Dictionary(Of String, String) ' 行ごとの配列として、テキストファイルの中身をすべて読み込む Dim lines As String() = System.IO.File.ReadAllLines(upfile, System.Text.Encoding.GetEncoding("UTF-8")) For Each line In lines ' カンマ区切りで分割して配列に格納する Dim fileValues As String() = line.Split(","c) idAndNames.Add(fileValues(0), fileValues(1)) Next resultModel.IdAndNames = idAndNames End If Return resultModel End Function End Class End Namespace
ビュー
Index.vbhtml@ModelType WebAppli.Models.DemoFileUpLoadModel @Code ViewData("Title") = "Index" End Code <h2>Demo for Upload File</h2> @Using (Html.BeginForm( "UploadFile", "DemoFileUpLoad", FormMethod.Post, New With {.enctype = "multipart/form-data"})) @Html.AntiForgeryToken() @Html.TextAreaFor(Function(model) model.Remarks, 30, 5) @<input type = "file" name="@Html.NameFor(Function(model) model.UploadedFile)" /> @<input type = "submit" value="アップロード" /> End UsingUploadFile.vbhtml
@ModelType WebAppli.Models.DemoFileUpLoadResultModel @Code ViewData("Title") = "ResultView" End Code <h2>ResultView</h2> @ViewData("ResultMessage") @Model.Remarks<br> @If IsNothing(Model.IdAndNames) Then @<div>Fileの中身が解読できず</div> Else @For Each idAndName In Model.IdAndNames @<ul> <li>@idAndName.Key</li> <li>@idAndName.Value</li> </ul> Next End If