我正在使用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
语句后它不为空。所以我不相信列表保存在数据库中,我怀疑我的模型有问题。如果我将其更改为单个字符串,我可以更新它。
有没有人有任何见解?感谢。