这是我的模型及其相关枚举,下面是我与实体框架 5 和 asp.net mvc4 codefirst 一起使用的模型。我也在使用便携式数据库文件(.mdf)
public class Project
{
public Project()
{
Images = new List<ProjectImage>();
}
public int ProjectId { get; set; }
[Required]
public string Title { get; set; }
public virtual ICollection<ProjectImage> Images { get; set; }
public string Description { get; set; }
public ProjectType Type { get; set; }
public ProjectState State { get; set; }
}
public enum ProjectType
{
Phone,
Web,
Windows
}
public enum ProjectState : byte
{
InProgress,
NotStarted,
Done
}
从视图回发模型后,除枚举字段外,所有字段都正确保存到数据库中。它们会被保存,但即使在视图中选择了不同的值后,也只会保存每种枚举类型的第一个值。
我也尝试过保存编辑,同样的情况发生了。
我已经逐步完成了我的 create post 方法的开头,在我的上下文中调用 savechanges 后一切似乎都很好,但是当我重定向回索引页面时,它显示枚举属性值作为枚举上的初始值(即第一个枚举值)
我的创建和编辑方法如下。希望它不是一个错误,但请帮忙,因为我已经为此拉头发了几天。我刚开始使用 codefirst 和枚举。谢谢。
创建帖子方法
[HttpPost]
public ActionResult Create(Project project, HttpPostedFileBase file)
{
try
{
if (file != null && file.ContentLength > 0 && file.ContentType.Contains("image"))
{
//create a new unique filename with using guid, filename and project title
string relativePath = Constants.PortfolioImagesBaseFolder +
project.Title.Replace(" ", "") +
Guid.NewGuid().ToString() +
Path.GetFileName(file.FileName);
string absolutePath = Server.MapPath(relativePath);
//save the file
file.SaveAs(absolutePath);
if (ModelState.IsValid)
{
project.Images.Add(new ProjectImage()
{
IsProjectMainImage = true,
Url = relativePath,
Title = "Main Project Image"
});
context.Projects.Add(project);
context.SaveChanges();
return RedirectToAction("Index");
}
}
ViewBag.ProjectTypes = CreateSelectListFromEnumType<ProjectType>();
ViewBag.ProjectStates = CreateSelectListFromEnumType<ProjectState>();
return RedirectToAction("Index");
}
编辑帖子方法
[HttpPost]
public ActionResult Edit(int id, Project project)
{
try
{
if (ModelState.IsValid)
{
//Project projectFromDb = context.Projects.Single(p => p.ProjectId == id);
//projectFromDb.State = project.State;
//projectFromDb.Type = project.Type;
//projectFromDb.Title = project.Title;
//projectFromDb.Description = project.Description;
EntityState entityState = context.Entry(project).State;
context.Entry(project).State = EntityState.Modified;
context.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ProjectTypes = CreateSelectListFromEnumType<ProjectType>();
ViewBag.ProjectStates = CreateSelectListFromEnumType<ProjectState>();
return View(project);
}
同样在标记为重复之前,我在 stackoverflow 上查看了许多答案,但没有一个可以帮助我,干杯,因此在提问之前等待两天。