繁体   English   中英

ASP.NET MVC3从部分视图上载文件(并填充模型中的相应字段)

[英]ASP.NET MVC3 Upload a file from a Partial view (and fill the corresponding field in the Model)

我知道这个问题已经在SO和其他地方讨论 ,但我找不到任何问题的答案。

我正在开发一个ASP.NET MVC3项目,我想创建一个包含FileUploadPartial视图 在基本的Create页面上调用此局部视图,我希望要上载的文件属于要创建的模型。 只有当用户提交表单时,才会上传所选文件。

以下是代码的解释:


Model ModelToCreate

public class ModelToCreate
{
    //Some properties

    public FileUploadModel Files { get; set; }
}


模型FileUploadModel

public class FileUploadModel
{
    public IEnumerable<HttpPostedFileBase> Files { get; set; }
}


我的PartialView(_UploadFiles.cshtml)

@model Models.ModelToCreate

//I tried with Html.BeginForm(Create, MyController instead of null, null, but with no result.
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.TextBoxFor(m => m.Files, new { type = "file", name = "Files" })
}


如何调用局部视图(通过Create.cshtml)

@Html.Partial("_UploadFiles")

我也试过@Html.Partial("_UploadFiles", Model) ,但没有结果......

当我单击Create.cshtml的“ Submit按钮时,表单将提交给我的控制器。“ Files字段始终为null而其他数据则为“正常”。

我错过了什么吗? 你能指出我的位置(为什么?)
谢谢 !



更新(和解决方案)

这里有一些我忘记了Create.cshtml的附加信息表单如下所示:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "target-form" }))
{
    // Some fields, Textboxes and others CheckBoxes

    //Call to partial View
}

当我看一下生成的源代码时,我在<form>标签中看到了局部视图...所以我在<tag>中有一个<tag> ,这是非法的并且“被忽略”。 这导致了问题

解决方案只需将此标记添加到Create.cshtml的Create.cshtml

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "target-form", enctype = "multipart/form-data" }))

并将我的部分视图称为

@Html.Partial("_UploadFiles", Model)

好的,这将使它适合你。

Create.cshtml视图(将表单和提交移动到部分之外)

@using(Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
   @Html.Partial("_UploadFiles", Model)
   <input type="submit" value="submit" />
}

_UploadFiles.cshtml视图

@model ModelToCreate

@Html.TextBoxFor(m => m.Files.Files, new { type = "file", name = "Files" })

模型(更改为列表并注意FileUploadModel构造函数中的初始化程序)。

public class ModelToCreate
{
    //Some properties
    public FileUploadModel Files { get; set; }
}

public class FileUploadModel
{
   public FileUploadModel()
   {
        Files = new List<HttpPostedFileBase>();
   }

   public List<HttpPostedFileBase> Files { get; set; }
}

控制器动作:

public ActionResult Create()
{
    var model = new ModelToCreate();

    return View(model);

}

[HttpPost]
public ActionResult Create(ModelToCreate model)
{
   var file = model.Files.Files[0];
   return View(model);
}

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM