将多个对象传递给控制器​​MVC

时间:2013-10-09 12:42:53

标签: asp.net-mvc-4

我开始使用MVC4 + EF并遇到图片上传问题: 我想将图像路径保存到DB,但实际文件保存到~/App_Data/

我需要传递" HttpPostedFileBase"和我的习惯" Image"对象" Create"控制器。我创建了一个课程" ImageUpload"传递两个对象。

" Image"类:

public class Image
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Path { get; set; }
    public int DepartmentId { get; set; }
}

" ImageUpload"类:

public class ImageUpload
{
    public Image image { get; set; }
    public HttpPostedFileBase file { get; set; }
}

查看:

@model MvcBannikov.Models.ImageUpload

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

        <fieldset>
            <legend>New Photo</legend>

            <div class="editor-label">
                <p>Name:</p>
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.image.Name)
                @Html.ValidationMessageFor(model => model.image.Name)
            </div>

            <div class="editor-label">
                <p>Path:</p>
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.file, new { type = "file" })
                @Html.ValidationMessageFor(model => model.file)
            </div>

            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }

&#34; Create&#34;方法:

[HttpPost]
public ActionResult Create(ImageUpload image)
{
     ......................
}

问题是ImageUpload对象是NULL :((

我需要一个文件和Image类的原因是Image类有一个部门ID - 我需要id

也许您知道如何将DepartmentId与文件一起传递给我?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

再创建一个额外图层,将其设为ViewModel。 而不是这个类设置你需要处理的所有字段,例如:Image类等。 并将此ViewModel指定为您的View作为MVC的“模型”

PS 此解决方案仅为您提供了如何同时使用多个模型的想法。但是它没有涵盖模型的正确性

答案 1 :(得分:0)

试试这个,只需将控制器更改为仅使用Image模型,然后从Request对象

获取文件

控制器:

[HttpPost]
public ActionResult Create(Image image)
{
     HttpPostedFileBase myFile = Request.Files["file"];
     ......................
}

没有检查代码,但我记得这样做过一次。