当使用enctype时,不要在mvc中调用Action Post

时间:2015-11-30 10:35:02

标签: asp.net-mvc asp.net-mvc-5

在我的项目中,我有这样的观点:

@using (Html.BeginForm(MVC.Admin.Sys.ActionNames.Index, MVC.Admin.Sys.Name, FormMethod.Post, new { enctype = "multipart/form-data" }))
{...}

我的行动是:

 [HttpGet]
    public virtual ActionResult Index()
    {...}
[HttpPost]
public virtual ActionResult Index(EditSysInfo sysInfoViewModel,HttpPostedFileBase file)
    {}

在View中我有:

 <input type="file" name="file"/> ... submit button

但是当点击“提交”按钮时,不要选择“发布”操作,并重定向到 httpget动作。昨天工作正常。我不知道为什么不跑? 今天我只需安装Microsoft.AspNet.Web.Optimization。 改变时:

@using (Html.BeginForm())

它的工作正常,但不能以这种方式发布文件。

我尝试将文件设置为Action Like This:

HttpPostedFileBase logo = Request.Files.Get("file");

Allways Count Request.FilesZero

谢谢。 的更新

[AcceptVerbs(HttpVerbs.Post)]
    public  ActionResult Index(EditSysInfo sysInfoViewModel,HttpPostedFileBase file)
    {...}

并在视图中:

@using (Html.BeginForm(MVC.Admin.SysInfo.ActionNames.Index, MVC.Admin.SysInfo.Name, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
         <input type="file" name="file"/>
}

1 个答案:

答案 0 :(得分:0)

我认为您的问题是,BeginForm辅助方法无法使用action属性值正确生成表单标记。可能是因为您提供的参数无效。

尝试将操作名称和控制器名称作为字符串传递。

以下代码应该可以正常工作。

@using (Html.BeginForm("Index", "Home", FormMethod.Post,
                                                new { enctype = "multipart/form-data" }))
{
   <input type="file" name="file"/>
   <input type="submit"/>
}

假设Index中的HomeController操作方法。如果您的控制器名称不同,请更新第二个参数。