保存数据库控制器类 asp.net mvc5 身份中的更改
Posted
技术标签:
【中文标题】保存数据库控制器类 asp.net mvc5 身份中的更改【英文标题】:Save changes in database controller class asp.net mvc5 identity 【发布时间】:2014-10-12 12:06:31 【问题描述】:Visual Studio 2013,ASP.NEt MVC 5 标识 请有人帮助我如何通过控制器将信息保存在数据库中。让我解释一下......我希望发生以下情况: 登录后的用户可以更新他的教育信息。在对字段进行更改后,他将按下保存按钮,信息将保存在数据库中。当我使用默认的 aspnet 用户类时,这很好用,我使用用户管理器。更新方法和信息已保存,但我无法对任何其他表执行此操作。如果有人帮助我,我将非常感激。 这是控制器类编辑方法
public async Task<ActionResult> Edit(string id, Education education)
if (!User.Identity.IsAuthenticated)
Response.Redirect("~/Account/Login");
var db = new ApplicationDbContext();
var educationdb = db.Edu.First(u => u.EducationID == education.EducationID);
educationdb.Qualification = education.Qualification;
educationdb.School = education.School;
educationdb.SchFrom = education.SchFrom;
educationdb.SchTo = education.SchTo;
educationdb.College = education.College;
educationdb.ClgFrom = education.ClgFrom;
educationdb.ClgTo = education.ClgTo;
educationdb.University = education.University;
educationdb.UniFrom = education.UniTo;
educationdb.Description = education.Description;
db.Entry(educationdb).State = System.Data.Entity.EntityState.Modified;
await db.SaveChangesAsync();
//return RedirectToAction("Index");
return View();
这是模型类:
namespace theme1.Models
public class Education
public string EducationID get; set;
public string UserID get; set;
public ApplicationUser User get; set;
public string Qualification get; set;
public string School get; set;
[DataType(DataType.Date)]
public DateTime SchFrom get; set;
[DataType(DataType.Date)]
public DateTime SchTo get; set;
public string College get; set;
[DataType(DataType.Date)]
public DateTime ClgFrom get; set;
[DataType(DataType.Date)]
public DateTime ClgTo get; set;
public string University get; set;
[DataType(DataType.Date)]
public DateTime UniFrom get; set;
[DataType(DataType.Date)]
public DateTime UniTo get; set;
public string Description get; set;
var educationdb = db.Edu.First(u => u.EducationID == education.EducationID);这一行给了我一个错误异常详细信息:System.InvalidOperationException:序列不包含元素
来源错误: 第 109 行:var educationdb = db.Edu.First(u => u.EducationID == education.EducationID);
【问题讨论】:
【参考方案1】:而不是:
var educationdb = db.Edu.First(u => u.EducationID == education.EducationID);
试试这个:
var educationdb = db.Edu.Where(u => u.EducationID == education.EducationID).FirstOrDefault();
或
而不是:
var educationdb = db.Edu.First(u => u.EducationID == education.EducationID);
试试这个:
var educationdb = db.Edu.FirstOrDefault(u => u.EducationID == education.EducationID);
【讨论】:
感谢您的即时帮助,现在我遇到了另一个错误 System.NullReferenceException:对象引用未设置为对象的实例。在这条线上educationdb.Qualification = education.Qualification; 是的,上一个已经没有了,但我的目标还没有实现……更改必须保存在数据库中 @ajkiah..check ..education.Qualification 它的值为 null 这就是错误即将到来的原因.. 是的,我知道...此表中没有存储任何内容,我尝试执行 u.UserID==education.UserID,这应该采用登录用户的用户 ID,并且表应该存储值当用户进行更改时,同样的 nullref 异常。请让我知道我应该怎么做才能让他们得救...谢谢 @ajkiah ...对不起,但我没有得到你..我刚刚纠正了你在问题中给出的问题..现在 u.UserID 来自哪里..????【参考方案2】:我怀疑您在 ApplicationContext 中缺少 DBSet for Education 模型。
如果这不能解决问题,您能否提供您的 ApplicationContext 类的代码?
【讨论】:
【参考方案3】:我无法评论您与 Kartikeya 的讨论,因为我是 *** 的新手并且缺乏声誉。
但是在你改变了你的 lambda 之后:
var educationdb = db.Edu.Where(u => u.EducationID ==
education.EducationID).FirstOrDefault();
根据您与 Kartikeya 的讨论,听起来您正在考虑创建而不是编辑。你不能编辑不存在的东西。
// GET: Model
public ActionResult Create()
return View();
在 MVC 5 中,通过右键单击该 Action 并选择“添加视图”并插入您需要的信息来构建视图非常容易,当您创建视图时,为 Create 创建您的 post 方法:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include ="EducationID, UserId....")] Education education)
if (ModelState.IsValid)
//any extra logic you might want
db.Edu.Add(education);
db.SaveChanges();
return RedirectToAction("Index");
return View(education);
【讨论】:
以上是关于保存数据库控制器类 asp.net mvc5 身份中的更改的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC5 OWIN Facebook 身份验证突然不起作用