12

ASP .Net MVC 4.0VS10を使用しています。私は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: /

4

4 に答える 4

14

フォームに「EncType」属性を追加してみてください。

@using (Html.BeginForm("ACTION", "CONTROLLER", FormMethod.Post, new { EncType="multipart/form-data"})){
  //FORM MARKUP HERE
}
于 2013-10-03T16:26:57.370 に答える
10

Phil Haack は、ブログ投稿Uploading a File (Or Files) With ASP.NET MVCでファイルのアップロードを処理する方法を示しています。

あなたが見逃しているものがかなりあるので、その投稿を読むことで、ここでのどの回答よりも先に進むことができます.

**編集1の更新**

いくつかの問題

  1. <form action="index" > -これはあるべきです<form action="/ControllerName/Index">
  2. 複数のフォーム タグがネストされています。複数のフォーム タグを使用できますが、ネストすることはできません。あなたの場合、必要なのは1つだけです。ほとんどの場合、必要なのは 1 だけです。
  3. <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>
}
于 2013-01-08T14:35:21.707 に答える
4

[アップロード] ボタンをクリックすると、このページが表示されます。ファイル アップロード ダイアログが開き、ファイルを選択すると、ファイルの場所が NAMEtxtFileName テキスト ボックスに表示されます。

ファイル アップロード要素はプログラムでアクセスできないため、これは不可能です。「昔」はそうでした。悪意のあるサイトは、ファイル アップロード コントロールの値をよく知られたパスワード ファイルの場所などに設定することで、機密情報を密かにアップロードしていました。

<input type="file" />@Bretts answer のリンクで提案されているように、フォームにを配置してアップロード サーバーサイドを処理するだけです。

于 2013-01-08T14:34:53.597 に答える
1

コントローラ クラスにファイル コントロールの名前を設定します。たとえば、上記のコードで

public ActionResult Index(HttpPostedFileBase NAMEbtnUpload)

NAMEbtnUpload を NAMEtxtFileName に変更すると、問題が解決します。

于 2013-03-15T09:08:20.527 に答える