在asp.net mvc 4 razor上传文件

Abd*_*him 12 c# file-upload razor asp.net-mvc-4

我正在使用ASP .Net MVC 4.0VS10.我是网络应用程序的新手.

我设计了一个带有hz剃刀视图的页面.以下是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>
}
Run Code Online (Sandbox Code Playgroud)

我想在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");
    }
Run Code Online (Sandbox Code Playgroud)

但这显示以下错误:

'/'应用程序中的服务器错误.

无法找到该资源. 描述:HTTP 404.您正在查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用.请查看以下网址,确保拼写正确.

请求的网址: /

Hem*_*ngo 14

尝试将"EncType"属性添加到表单中.

@using (Html.BeginForm("ACTION", "CONTROLLER", FormMethod.Post, new { EncType="multipart/form-data"})){
  //FORM MARKUP HERE
}
Run Code Online (Sandbox Code Playgroud)


Bre*_*red 10

Phil Haack通过他的博客文章使用ASP.NET MVC上传文件(或文件)向您展示如何处理文件上传.

你有很多东西都没有,所以阅读这篇文章会让你比任何答案更进一步.

**编辑更新1**

几个问题

  1. <form action="index" > - 这应该是 <form action="/ControllerName/Index">
  2. 您有多个嵌套的表单标记.您可以拥有多个表单标记,但它们不能嵌套.在你的情况下,你唯一需要一个.大多数时候你只需要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>
}
Run Code Online (Sandbox Code Playgroud)


Cod*_*ter 4

单击[上传]按钮,我们将进入此页面,将打开一个文件上传对话框并选择文件,文件位置将显示在NAMEtxtFileName文本框中。

这是不可能的,因为文件上传元素不再能够以编程方式访问。“回到过去”,恶意网站通过将文件上传控件的值设置为众所周知的密码文件位置等来悄悄上传敏感信息。

您只需<input type="file" />在表单上添加一个并处理上传服务器端,如 @Bretts 答案的链接中所建议的。