ASP.NET MVCでファイルをアップロードすると問題が発生します。私のコードは次のとおりです。
表示:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index2</h2>
@using (Html.BeginForm("FileUpload", "Board", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" />
<input type="submit" />
}
コントローラ:
[HttpPost]
public ActionResult FileUpload(HttpPostedFileBase uploadFile)
{
if (uploadFile != null && uploadFile.ContentLength > 0)
{
string filePath = Path.Combine(Server.MapPath("/Temp"), Path.GetFileName(uploadFile.FileName));
uploadFile.SaveAs(filePath);
}
return View();
}
ただし、uploadFileは常にnullを返します。誰が理由を理解できますか?
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index2</h2>
@using (Html.BeginForm("FileUpload", "Board", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="uploadFile"/>
<input type="submit" />
}
aSP.net mvcでバインディング作業をモデル化するには、ploadFileに入力タイプファイルの名前を指定する必要があります。
また、入力タイプファイルの名前と引数名 of HttpPostedFileBase
が同一であることも確認してください。
このトピックについては、オンラインで投稿されたほとんどのソリューションを試しましたが、代わりに回避策を使用する方が良いことがわかりました。
HttpPostedFileBaseおよび/またはHttpPostedFileが常にnullであるということは、実際には問題ではありませんでした。 HttpContext.Request.Filesコレクションを使用すると、手間がまったくかかりません。
例えば.
if (HttpContext.Request.Files.AllKeys.Any())
{
// Get the uploaded image from the Files collection
var httpPostedFile = HttpContext.Request.Files[0];
if (httpPostedFile != null)
{
// Validate the uploaded image(optional)
// Get the complete file path
var fileSavePath =(HttpContext.Server.MapPath("~/UploadedFiles") + httpPostedFile.FileName.Substring(httpPostedFile.FileName.LastIndexOf(@"\")));
// Save the uploaded file to "UploadedFiles" folder
httpPostedFile.SaveAs(fileSavePath);
}
}
上記の例では、最初のファイルを取得するだけですが、コレクションをループしてすべてのファイルを保存するだけです。
HTH
ロブ
私のシナリオでは、問題はid属性にあり、これがありました:
<input type="file" name="file1" id="file1" />
Soultionはidを削除することでした:
<input type="file" name="file1" />
この特定のユーザーへの答えではありませんが、 HTMLではformタグには値multipart/form-dataのenctype属性が必要です。 そしてもちろん属性とその両方値は正しくなければなりません。
Mvcの場合、これは、beginformを使用する場合、htmlAttributesパラメーターを指定したバージョンを使用する必要があることを意味します
別のシナリオもあります。私の場合、MVCビューでスクリプトタグを直接レンダリングしていたため、この問題が発生していました。IEが問題を示しています。
ビュー内の正しいコードは次のようになります。
@section scripts
{
<script>
$(document).ready(function () {
$('.fileinput').fileinput();
...
}