MVC 3:从另一个模型的编辑页面中创建一个新的模型实例,并将其添加到父模型中

时间:2011-06-03 20:34:02

标签: c# asp.net-mvc

我一直无法弄清楚如何最好地实现图片库编辑页面,允许用户将图片直接上传到我的朋友的MVC 3项目的图库中。我试过四处寻找,但似乎没有任何关于我正在寻找的文件。

用户创建图库后,控制器会将其重定向到编辑页面,我希望让用户将新图像上传到图库。上传后,我可以将其添加到图库模型,刷新页面,并将其与其他图像一起显示在列表中。

我无法弄清楚如何处理上传部分。我很确定它应该是“保存更改”操作的单独操作,但我不知道是否应该将上传器实现为部分视图,子操作或其他我尚未听说过的操作。

我的直觉是部分视图,但是当我这样做时,我无法弄清楚如何获取主机页面的强类型图库对象,以便我可以正确地将图像添加到正确的图库在部分视图中。

任何想法如何正确实现这样的东西?

1 个答案:

答案 0 :(得分:2)

嗯,解决方案比我想象的更容易。

我创建了一个名为UploadImage的新ActionResult:

    [HttpPost]
    public ActionResult UploadImage()
    {
        string galleryId = Request.Form["GalleryId"];
        string title = Request.Form["ImageTitleField"];
        string description = Request.Form["ImageDescriptionField"];
        HttpPostedFileBase imageUpload = Request.Files["ImageUploadField"];

        return RedirectToAction("Edit", new { new Guid(galleryId) });
    }

然后我创建了一个绑定到ImageGallery模型的局部视图,我在编辑页面的主窗体之外使用@Html.Partial("UploadImage", Model)进行渲染。部分视图只包含两个文本字段,标题和说明,以及文件上载字段。它还包含一个隐藏字段,用于获取绑定的ImageGallery的Id属性。

当用户点击“上传”时,上述方法会触发,允许我生成新的图像模型,并使用传递到局部视图中的Id字段将其添加到相应的ImageGallery条目中。上传图像后,用户将被重定向到同一个编辑页面,其中上传的图像与其他图像一起显示在列表中。