C# asp.net mvc 4中的文件上载

C# asp.net mvc 4中的文件上载,c#,file-upload,razor,asp.net-mvc-4,C#,File Upload,Razor,Asp.net Mvc 4,我正在使用ASP.NETMVC4.0和VS10。我是网络应用的新手 我设计了一个带有html razor视图的页面。下面是Index.cshtml的一些代码: @{ ViewBag.Title = "BAP Automation"; } @section featured { <section class="featured"> <div class="content-wrapper"> <hgroup class="

我正在使用ASP.NETMVC4.0和VS10。我是网络应用的新手

我设计了一个带有html razor视图的页面。下面是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>
}
但这显示了以下错误:

“/”应用程序中出现服务器错误。 找不到资源。 说明HTTP 404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下URL并确保其拼写正确

请求的URL:/

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

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


您只需在表单上添加一个
,并处理上传服务器端,正如@Bretts答案上的链接所建议的那样。

Phil Haack通过他的博客文章向您展示了如何处理文件上传

有相当多的东西你错过了,所以阅读这篇文章会让你比这里的任何答案更进一步

**编辑1的更新**

几个问题

  • -这应该是
  • 您有多个嵌套的表单标记。可以有多个表单标记,但不能嵌套。在你的情况下,你只需要一个。大多数情况下,您只需要1
  • 应该是
  • 使用(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>
    }
    
    @使用(Html.BeginForm(“索引”))
    {
    上载Excel文件:
    公司名称:
    }
    
    在控制器类中设置文件控件的名称。 例如在上面的代码中

    public ActionResult Index(HttpPostedFileBase NAMEbtnUpload)
    
    将NAMEbtnUpload更改为NAMEtxtFileName 这可以解决您的问题。

    尝试将“EncType”属性添加到表单中

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

    我必须重定向到另一个页面?通过action=“”和method=“post”?只需知道,输入类型文件必须具有name属性,而不是文件未上传(在chrome上测试)我已阅读此内容。但面临的问题。在这里,我的问题已被编辑。请看一看。您在RouteConfig中配置了路由吗?这里有一个内联链接可能会对您有所帮助()。对于将在多个控制器之间重用的局部视图,这是什么样子的?
    @using (Html.BeginForm("ACTION", "CONTROLLER", FormMethod.Post, new { EncType="multipart/form-data"})){
      //FORM MARKUP HERE
    }