保存数据库控制器类 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 身份验证添加到现有项目

ASP.NET MVC5 自定义身份验证

为 ASP.NET MVC 身份创建身份用户页面

ASP.NET MVC5 OWIN Facebook 身份验证突然不起作用

如何将类的对象发送到数据库以存储在 ASP.NET MVC5 中?

ASP.Net MVC 5 身份验证与另一个 MVC 5 身份网站