C# 如何在Asp.net MVC 5应用程序中上载文件
我正在尝试在我的应用程序中上载文件。我在模型中使用了C# 如何在Asp.net MVC 5应用程序中上载文件,c#,asp.net,asp.net-mvc,asp.net-mvc-4,httppostedfilebase,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Httppostedfilebase,我正在尝试在我的应用程序中上载文件。我在模型中使用了HttpPostedFileBase和byte[]数组,但不知道为什么在运行应用程序时会显示此错误。下面我还上传了运行应用程序时显示的错误的图像 显示的错误是: 在模型生成过程中检测到一个或多个验证错误: AdSite.Models.HttpPostedFileBase::EntityType“HttpPostedFileBase”未定义键。定义此EntityType的键。 HttpPostedFileBase:EntityType:Entit
HttpPostedFileBase
和byte[]
数组,但不知道为什么在运行应用程序时会显示此错误。下面我还上传了运行应用程序时显示的错误的图像
显示的错误是:
在模型生成过程中检测到一个或多个验证错误:
AdSite.Models.HttpPostedFileBase::EntityType“HttpPostedFileBase”未定义键。定义此EntityType的键。
HttpPostedFileBase:EntityType:EntitySet“HttpPostedFileBase”基于未定义键的类型“HttpPostedFileBase”`
我的模型:
public class Album
{
[Key]
public int Id { get; set; }
public string ProductTitle { get; set; }
public string Description { get; set; }
public string ImageFileName { get; set; }
public int ImageSize { get; set; }
public byte[] ImageData { get; set; }
[Required(ErrorMessage="Please select image file.")]
public HttpPostedFileBase File { get; set; }
}
我的控制器代码:
public ActionResult Upload([Bind(Include = "Id,ProductTitle,Description,ImageFileName,ImageData,File,ImageSize")]Album album)
{
if (ModelState.IsValid)
{
// album.ImageFileName = album.File.FileName;
// album.ImageSize = album.File.ContentLength;
byte[] data = new byte[album.File.InputStream.Length];
album.File.InputStream.Read(data, 0, data.Length);
album.ImageData = data;
var db = new AlbumContext();
db.Albums.Add(album);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(album);
}
我的视图代码:
<div class="form-group">
<label class="control-label col-md-2">Select Image:</label>
<div class="col-md-10">
@Html.TextBoxFor(model=>model.File, new { type="file"})
@Html.ValidationMessage("CustomError")
</div>
</div>
选择图像:
@Html.TextBoxFor(model=>model.File,新的{type=“File”})
@Html.ValidationMessage(“CustomError”)
这就是为什么要使用模型检索数据,然后将其转换为DTO对象
错误是因为您试图将该类存储到数据库中。这不是您要控制的类,也不是为了直接存储在数据库中而创建的。在本例中,HttpPostedFileBase
是您的“模型”
创建另一个对象,并将其绑定到DbContext
中,以便在数据库中存储有关该文件的所需信息。不要只是把对象扔进去。这就是为什么要使用模型检索数据,然后将其转换为DTO对象
错误是因为您试图将该类存储到数据库中。这不是您要控制的类,也不是为了直接存储在数据库中而创建的。在本例中,HttpPostedFileBase
是您的“模型”
创建另一个对象,并将其绑定到DbContext
中,以便在数据库中存储有关该文件的所需信息。不要只是把对象扔进去。在“绑定”属性中,定义“相册”的属性。“File”属性从何而来?Hello@SRQCoder,文件
属性在模型类
中定义。它的类型为HttpPostedFileBase File
。您可以在这里看到我的模型类。您需要从数据模型中删除公共HttpPostedFileBase文件{get;set;}
(它是一个复杂的对象,不能存储在数据库列中)。编辑数据时使用视图模型,视图模型将包含该属性(而不是public byte[]ImageData{get;set;}
property-在“Bind”属性中,您定义了“album”的属性。“File”属性从何而来?Hello@SRQCoder,文件
属性是在模型类
中定义的。它的类型为HttpPostedFileBase文件
。您可以在这里看到我的模型类。您需要删除公共HttpPostedFileBase文件数据模型中的文件{get;set;}
(它是一个复杂的对象,不能存储在数据库列中)。编辑数据时使用视图模型,视图模型将包含该属性(而不是公共字节[]ImageData{get;set;}
property-谢谢。但是你能在这里给我看一个示例代码吗?你的意思是创建一个新的“模型类”吗有关需要上载的文件的其他信息?也就是说,我需要两个类,一个用于HttpPostedFileBase属性,另一个用于其他属性??我的意思是为HttpPostedFileBase
中需要的任何信息创建一个DTO类。我提供了到HttpPostedFileBase
类的链接。您已经有了相册
class,对你的文件做一个类似的处理。@krillgar你能帮我解决这个问题吗谢谢。但是你能在这里给我一个示例代码吗?你的意思是创建一个新的“模型类”吗有关需要上载的文件的其他信息?也就是说,我需要两个类,一个用于HttpPostedFileBase属性,另一个用于其他属性??我的意思是为HttpPostedFileBase
中需要的任何信息创建一个DTO类。我提供了到HttpPostedFileBase
类的链接。您已经有了相册
c小姑娘,对你的文件做一个类似的处理。@krillgar你能帮我解决这个问题吗