gpt4 book ai didi

asp.net - 但是这个字典需要一个类型为 'System.Collections.Generic.IEnumerable` 1[MvcApplication1.Models.FileStore]' 的模型项

转载 作者:行者123 更新时间:2023-12-01 13:01:29 24 4
gpt4 key购买 nike

我正在关注 http://www.mikesdotnetting.com/Article/125/ASP.NET-MVC-Uploading-and-Downloading-Files .在 SQL Server 2008R2 中使用 C# 中的 VS2010、ASP.NET 4.0、MVC3 和 ADO.NET。我收到以下错误消息...

传递到字典中的模型项的类型为“MvcApplication1.Models.FileStore”,但此字典需要类型为“System.Collections.Generic.IEnumerable1[MvcApplication1.Models”的模型项。文件存储]'。
说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。
异常详细信息:System.InvalidOperationException:传入字典的模型项的类型为“MvcApplication1.Models.FileStore”,但此字典需要类型为“System.Collections.Generic.IEnumerable”的模型项
1[MvcApplication1。模型.FileStore]'。源错误:在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。

我不太担心我的 Index 方法可能有误。如果有人能告诉我解决这个问题的方法,请提前致谢。

Controller 中的索引方法有如下代码...

 FileStore db = new FileStore();

public ActionResult Index()
{
var db = new FileStore();
return View(db);
}

Controller 中的创建方法有以下方法...

 public ActionResult Create()
{
foreach (string upload in Request.Files)
{
if (!Request.Files[upload].HasFile()) continue;

string mimeType = Request.Files[upload].ContentType;
Stream fileStream = Request.Files[upload].InputStream;
string fileName = Path.GetFileName(Request.Files[upload].FileName);
int fileLength = Request.Files[upload].ContentLength;
byte[] fileData = new byte[fileLength];
fileStream.Read(fileData, 0, fileLength);

const string connect = @"Server=.\SQLExpress;Database=FileTest;Trusted_Connection=True;";
using (var conn = new SqlConnection(connect))
{
var qry = "INSERT INTO FileStore (FileContent, MimeType, FileName) VALUES (@FileContent, @MimeType, @FileName)";
var cmd = new SqlCommand(qry, conn);
cmd.Parameters.AddWithValue("@FileContent", fileData);
cmd.Parameters.AddWithValue("@MimeType", mimeType);
cmd.Parameters.AddWithValue("@FileName", fileName);
conn.Open();
cmd.ExecuteNonQuery();
}
}
return View();
}

GetFile 方法有以下代码...

 public FileContentResult GetFile(int id)
{
SqlDataReader rdr; byte[] fileContent = null;
string mimeType = ""; string fileName = "";
const string connect = @"Server=.\SQLExpress;Database=FileTest;Trusted_Connection=True;";

using (var conn = new SqlConnection(connect))
{
var qry = "SELECT FileContent, MimeType, FileName FROM FileStore WHERE ID = @ID";
var cmd = new SqlCommand(qry, conn);
cmd.Parameters.AddWithValue("@ID", id);
conn.Open();
rdr = cmd.ExecuteReader();
if (rdr.HasRows)
{
rdr.Read();
fileContent = (byte[])rdr["FileContent"];
mimeType = rdr["MimeType"].ToString();
fileName = rdr["FileName"].ToString();
}
}
return File(fileContent, mimeType, fileName);
}

Index.cshtml 有如下代码...

@model IEnumerable<MvcApplication1.Models.FileStore>

最佳答案

您的 View 被强类型化为 FileStore 集合(例如列表)。如果你只发送一个对象,你应该改变它。否则先创建一个集合,将对象添加到其中,然后将其发送到 View 。

如果您要使用第一种方法,请查看索引 View 中的第一行。应该有这样的语句。

Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication1.Models.FileStore>>

我从我的观点来看,它在 MVC 3 中可能有所不同。它声明 View 是强类型的 FileStore 集合。更改它

Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.FileStore>

更新:

您正在使用 Razor。我对此不熟悉,但您应该更改模型行:

@model MvcApplication1.Models.FileStore

@model IEnumerable<MvcApplication1.Models.FileStore>

如果您需要发送多个对象,请在操作方法中创建一个列表,添加您想要的任何内容或让存储库为您获取它们。

List<FileStore> fileStores=new List<FileStore>();
FileStore fileStore=new FileStore();
fileStores.Add(fileStore);
return View(fileStores);

var someFileStores=repository.GetSomeStores();
return View(someFileStores);

关于asp.net - 但是这个字典需要一个类型为 'System.Collections.Generic.IEnumerable` 1[MvcApplication1.Models.FileStore]' 的模型项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5708037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com