Forms “如何写作”;Html.BeginForm";剃刀

Forms “如何写作”;Html.BeginForm";剃刀,forms,asp.net-mvc-3,razor,Forms,Asp.net Mvc 3,Razor,如果我这样写: [AcceptVerbs(HttpVerbs.Post)] public ActionResult Upload() { foreach (string file in Request.Files) { var uploadedFile = Request.Files[file]; uploadedFile.SaveAs(Server.MapPath("~/content/pics") +

如果我这样写:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Upload() 
{
    foreach (string file in Request.Files)
    {
        var uploadedFile = Request.Files[file];
        uploadedFile.SaveAs(Server.MapPath("~/content/pics") + 
                                      Path.GetFileName(uploadedFile.FileName));
    }

    return RedirectToAction ("Upload");
}
form action=“Images”method=“post”enctype=“多部分/表单数据”

它起作用了

但在剃须刀中,它不起作用。我犯了什么错误吗

@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, 
                             new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true)

    <fieldset>

        Select a file <input type="file" name="file" />
        <input type="submit" value="Upload" />

    </fieldset>
}

以下代码可以正常工作:

@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, 
                                      new { enctype = "multipart/form-data" }))
{
    @Html.ValidationSummary(true)
    <fieldset>
        Select a file <input type="file" name="file" />
        <input type="submit" value="Upload" />
    </fieldset>
}
就服务器端代码而言,以下是:


这个动作实际上是“图像”还是“上传/上传”?实际上我有两个控制器。具有“映像”操作的映像控制器。。并上传带有上传操作的控制器。谢谢。看看我在问题中更新的控制器。它不适用于Razor代码。@user1076915,它不适用意味着什么?你能再具体一点吗。我已经用一个示例代码更新了我的答案,说明了控制器操作的样子。如果您无法在控制器操作中获取上载的文件,则可能意味着您有嵌套的
标记(HTML中不允许这样做)或者您可能使用了一些javascript,它劫持了正常表单提交,并执行了一个与文件上传不兼容的AJAX请求。。但它显示-->说明:HTTP 404。您正在查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下URL并确保其拼写正确。@user1076915,何时收到此错误消息?当您要呈现上载表单或提交表单时?在第一种情况下,确保您有一个
GET
Upload操作,该操作将为包含此代码的
Upload.cshtml
视图提供服务:
public ActionResult Upload(){return view();}
。因此,请确保您有一个名为
UploadController
的控制器,其中包含两个上载操作:一个用于服务表单,另一个用于处理提交。工作正常,但我建议在POST上下文中添加:@Html.AntiForgeryToken();
<form action="/Upload/Upload" enctype="multipart/form-data" method="post">    
    <fieldset>
        Select a file <input type="file" name="file" />
        <input type="submit" value="Upload" />
    </fieldset>
</form>
@if (SomeCondition)
{
    using (Html.BeginForm("Upload", "Upload", FormMethod.Post, 
                                      new { enctype = "multipart/form-data" }))
    {
        @Html.ValidationSummary(true)
        <fieldset>
            Select a file <input type="file" name="file" />
            <input type="submit" value="Upload" />
        </fieldset>
    }
}
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file) 
{
    if (file != null && file.ContentLength > 0) 
    {
        var fileName = Path.GetFileName(file.FileName);
        var path = Path.Combine(Server.MapPath("~/content/pics"), fileName);
        file.SaveAs(path);
    }
    return RedirectToAction("Upload");
}