列表永远是“空”(ASP MVC3)

时间:2011-12-05 21:58:29

标签: asp.net-mvc code-first

我正在使用ASP MVC3开发我的第一个项目。我的应用程序首先使用实体​​框架4.1和SQL服务器CE。

该应用程序是一个文档库。主要模型是Document,它是pdf文件和一堆元数据的路径。

我的控制器中有一个“替换”功能,它接受一个文档记录,将文件移动到存档位置,并使用有关替换的信息更新数据库。 我试图存储一个字符串列表,其中包含代表文件路径的文档到同一文档的旧版本。

无论如何我都无法将这个名为ArchivedFilePaths的列表变为“null”。

型号:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

namespace DocLibrary.Models
{
    public class Document
    {
        public int DocumentId { get; set; }
        public int CategoryId { get; set; }
        public string DocumentCode { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public string FileUrl { get; set; }
        public int FileSize { get; set; }
        public string FileSizeString { get; set; }
        public int Pages { get; set; }
        public string Creator { get; set; }
        public int Revision { get; set; }
        public DateTime CreatedDate { get; set; }
        public DateTime LastModifiedDate { get; set; }
        public virtual Category Category { get; set; }
        public List<String> ArchivedFilePaths { get; set; }
        public SoftwareVersion SoftwareVersion { get; set; }
    }

控制器:

public ActionResult Replace(HttpPostedFileBase file)
        {
            if (file != null && file.ContentLength > 0)
            {
                int id = Int32.Parse(Request["DocumentId"]);
                Document doc = docsDB.Documents.Find(id);


                //move the current version to the ~/Archive folder
                string current_path = Path.Combine(Server.MapPath("~/Files"), Path.GetFileName(doc.FileUrl));
                string archiveFileName = Path.GetFileNameWithoutExtension(doc.FileUrl) + "-" + doc.Revision.ToString() + ".pdf";
                string destination_path = Path.Combine(Server.MapPath("~/Archive"), archiveFileName);
                System.IO.File.Move(current_path, destination_path);


                if (doc.ArchivedFilePaths == null)
                {
                    doc.ArchivedFilePaths = new List<String>();
                }
                doc.ArchivedFilePaths.Add(destination_path);

   //there are a bunch of statements that update the title, number of pages, etc. here, all of these work fine

                    try
                    {
                        docsDB.Entry(doc).State = EntityState.Modified;
                        docsDB.Logs.Add(new Log { LogDate = DateTime.Now, LogText = "Document replaced with a new version: " + doc.Title, });
                        docsDB.SaveChanges();
                        return RedirectToAction("Index");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                }
            }
            //if a file was not selected;
            return RedirectToAction("Index");
        }

“索引”视图显示所有文件及其属性,包括ArchivedFilePaths。使用新文件替换文档后,除ArchivedFilePaths外,Document模型中的所有项目都会正确更新。

如果我在VisualStudio中检查列表,则在doc.ArchivedFilePaths.Add语句后它不为空。所以我不相信列表保存在数据库中,我怀疑我的模型有问题。如果我将其更改为单个字符串,我可以更新它。

有没有人有任何见解?感谢。

0 个答案:

没有答案