使用HttpPostedFileBase的强类型模型无法支撑视图

本文关键字:视图 模型 HttpPostedFileBase 强类型 使用 | 更新日期: 2023-09-27 18:19:00

我希望有人能帮助我。

我使用的是VS 2012和MVC4。

我正在使用HttpPostedFileBase测试使用强类型模型的项目。当我尝试脚手架视图时,它失败了:

---------------------------
Microsoft Visual Studio
---------------------------
Unable to retrieve metadata for 'ImageTest.Models.ImageHandler'. Value cannot be null.
Parameter name: key
---------------------------
OK   
---------------------------

我曾试图卸载,然后重新安装MVC,建议在网上的几个帖子,但这并没有帮助。这是我的模型:(是的,我已经在Id上尝试了[Key],但没有区别)

using System;
using System.Web;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace ImageTest.Models
{
public class ImageHandler
{
public int Id { get; set; }
public string ImageName { get; set; }
public HttpPostedFileBase File { get; set; }
}
}

我认为这可能是一个上下文问题,但它并不重要,如果我创建一个自定义上下文或使用一个预定义的我得到相同的错误。这是预定义的上下文:

using ImageTest.Models;
using System.Data.Entity;
public class ImageHandlerContext : DbContext
{
public ImageHandlerContext() : base("DefaultConnection")
{
}
public DbSet<ImageHandler> ImageHandler { get; set; }
}

作为测试,如果我注释掉:

// public HttpPostedFileBase File { get; set; }

我可以支架视图没有问题。这是臭虫吗?我无法在文档中看到脚手架httppostdfilebase不受支持的任何地方。看到:HttpPostedFileBase

使用HttpPostedFileBase的强类型模型无法支撑视图

Stan走对了路。

模型-视图-控制器或MVC使用实体框架来支撑视图。

实体数据模型:基本数据类型

基本数据类型目前在。net 4.5中是支持的,除非定义了复杂数据类型。以下是支持的基本数据类型:

Binary
Boolean
Byte
DateTime
DateTimeOffset
Decimal
Double
Float
Guid
Int16
Int32
Int64
SByte
String
Time

有关扩展此功能的更多信息,请参阅:Complex Type。

谢谢Stan,我点赞。

EDIT:首先需要用原始数据类型来支撑视图,然后将HttpPostedFileBase添加到模型中,以便稍后使用文件上传功能。作为一个例子,请参阅:上传图像的形式,并显示在MVC 4

还需要在模型中使用(NotMapped):

[NotMapped]
public HttpPostedFileBase File { get; set; }

现在在脚手架的Create ActionResult方法中,你的视图的表单返回值包含了一个System.Web.HttpPostedFileWrapper,你可以使用。

So简短回答:

1: Create your Code First Model with Primitive Data Types only! Unless you use the [NotMapped] Attribute.
2: Scaffold your View's.
3: If not done so in step 1, Add to your Model the Methods needed.  E.G: public HttpPostedFileBase File { get; set; } using the [NotMapped] Attribute
4: Add to your Database the necessary Table either manually or from the Console.
5: Add the necessary code to your View's and Controller.

这应该足够让你工作了

我不认为你将能够HttpPostedFileBase作为你的模型的属性,好吧,至少没有它映射通过实体框架和自动脚手架。如果你考虑一下——你认为这个属性类型会映射到哪些数据库字段?

如果您想实际将二进制数据存储在数据库中,请使用

public byte[] File { get; set; }