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

传递到字典中的模型项的类型为“MvcApplication1.Models.FileStore”,但是此字典需要模型类型为“System.Collections.Generic.IEnumerable 1[MvcApplication1.Models.FileStore]'.Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.Exception Details: System.InvalidOperationException: The model item passed into the dictionary is of type 'MvcApplication1.Models.FileStore', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [MvcApplication1.Models.FileStore]”的模型项。
源错误:在执行当前Web请求的过程中生成了未处理的异常。可以使用下面的异常堆栈跟踪来标识有关异常的来源和位置的信息。

我担心我的Index方法可能出错。在此先感谢您是否可以告诉我解决此问题的方法。

控制器中的索引方法具有以下代码...

 FileStore db = new FileStore();

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

控制器中的create方法具有以下方法...
 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>

最佳答案

您的视图已严格键入FileStore集合(例如列表)。如果仅发送一个对象,则应更改该设置。否则,首先创建一个集合,向其中添加对象,然后将其发送到视图。

如果要使用第一种方法,请在索引视图中查找第一行。应该有这样的语句。

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

我从我的角度看待它,它在MVC 3中可能有所不同。它指出视图已强类型化为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);

10-08 13:36