ASP .Net MVC 4.およびVS1を使用しています。私はWebアプリケーションの初心者です。
HTMLかみそりビューのページをデザインしました。これがIndex.cshtmlのコードです。
@{
ViewBag.Title = "BAP Automation";
}
@section featured {
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>@ViewBag.Title.</h1>
<h2>@ViewBag.Message</h2>
</hgroup>
<form action="Index">
<table> **//EDITED BELLOW**
<tr><form action="" method="post">
<td>Upload Excel File: </td>
<td><input type="text" name="NAMEtxtFileName"/></td>
<td><input type="button" value="Upload" id="IDbtnUpload" name="NAMEbtnUpload"/></td>
</form>
</tr>
<tr>
<td>Company Name: </td>
<td><input type="text" /></td>
<td></td>
</tr>
<tr>
<td></td>
<td align="right"><input type="submit" value="Process" /></td>
<td></td>
</tr>
</table>
</form>
</div>
</section>
}
NAMEbtnUploadのクリックイベントでExcelファイルをアップロードしようとしています。このボタンをクリックすると、このページが表示されます。ファイルのアップロードダイアログが開き、ファイルを選択すると、ファイルの場所がNAMEtxtFileNameテキストボックスに表示されます。
編集1:
提案されたコードからいくつかのコードを書きました:
[HttpPost]
public ActionResult Index(HttpPostedFileBase NAMEbtnUpload)
{
if (NAMEbtnUpload.ContentLength > 0)
{
var fileName = Path.GetFileName(NAMEbtnUpload.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/Given Excel's"), fileName);
NAMEbtnUpload.SaveAs(path);
}
return RedirectToAction("Index");
}
しかし、これは次のエラーを示しています:
リソースが見つかりません。説明:HTTP 404。探しているリソース(またはその依存関係の1つ)が削除されたか、名前が変更されたか、一時的に利用できなくなっている可能性があります。次のURLを確認して、スペルが正しいことを確認してください。
リクエストされたURL: /
「EncType」属性をフォームに追加してみてください。
@using (Html.BeginForm("ACTION", "CONTROLLER", FormMethod.Post, new { EncType="multipart/form-data"})){
//FORM MARKUP HERE
}
Phil Haackは、彼のブログ投稿でファイルのアップロードを処理する方法を示しています ASP.NET MVCを使用したファイル(またはファイル)のアップロード 。
あなたが見逃しているものがかなりあるので、その投稿を読むと、ここでの答えよりもさらにあなたを得るでしょう。
**編集1の更新**
いくつかの問題
<form action="index" >
_-これは_<form action="/ControllerName/Index">
_である必要があります<input type="button" value="Upload" id="IDbtnUpload" name="NAMEbtnUpload"/>
_はフォームタグを手動で作成するのではなく、@using(Html.BeginForm())
を使用するのがより一般的です。下記参照。
_@using(Html.BeginForm("Index"))
{
<table>
<tr>
<td>Upload Excel File: </td>
<td><input type="text" name="NAMEtxtFileName"/></td>
<td><input type="file" id="IDbtnUpload" name="NAMEbtnUpload"/></td>
</tr>
<tr>
<td>Company Name: </td>
<td><input type="text" /></td>
<td></td>
</tr>
<tr>
<td></td>
<td align="right"><input type="submit" value="Process" /></td>
<td></td>
</tr>
</table>
}
_
このページにある[アップロード]ボタンをクリックすると、ファイルのアップロードダイアログが開いてファイルを選択するだけで、ファイルの場所がNAMEtxtFileNameテキストボックスに表示されます。
ファイルアップロード要素にはプログラムからアクセスできないため、これは不可能です。 「昔のこと」でした。悪意のあるサイトは、ファイルアップロードコントロールの値を既知のパスワードファイルの場所などに設定することにより、機密情報を静かにアップロードしました。
@Bretts回答のリンクで提案されているように、フォームに<input type="file" />
を配置し、アップロードサーバーサイドを処理する必要があります。
コントローラークラスにファイルコントロールの名前を設定します。上記のコードの例
public ActionResult Index(HttpPostedFileBase NAMEbtnUpload)
nAMEbtnUploadをNAMEtxtFileNameに変更すると、問題が解決します。