如何保存和使用MVC视图模型

问题描述:

public int ID { get; set; } 

    [Required] 
    public string Surname{get;set;} 

    [Required (ErrorMessage="FirstName Required")] 
    public string Firstname{get;set;} 

    [Required(ErrorMessage="please enter your OtherNames")] 
    public string Othername{get;set;} 

    [Required(ErrorMessage="please enter your sex")] 
    public string Sex{get;set;} 

    [Required (ErrorMessage="please enter your DateOfBirth")] 
    public DateTime DateOfBirth{get;set;} 

    [Required(ErrorMessage="Address is required")] 
    public string Address{get;set;} 

    [Required(ErrorMessage="city is required")] 
    public string City{get;set;} 

    [Required(ErrorMessage="State is required")] 
    public string State{get;set;} 

    public string Country{get;set;} 


} 

我已创建充当如何保存和使用MVC视图模型

public interface IStudentRepository 
    { 

     IQueryable<Student> Student { get; } 
     //we using a method to save the record into our database 
     void Save(Student student); 


    } 

接口正在由implented我的领域层和我的WEBUI之间的中间人的界面更新以相同的形式的记录我的仓库类同名但保存记录到数据库和检索它的一切行动..

public class EFRepository:IStudentRepository 
    { 
     private EFDBContext context = new EFDBContext(); 

     public IQueryable<Student> Student{ get { return context.Students; } } 


     public void Save(Student student) 
     { 

      if (student.ID == 0) 
      { 

       context.Students.Add(student); 
      } 

      context.SaveChanges(); 

     } 

,然后我有创建学生类和使用的实例的视图界面到记录存储在数据库中,它完美的作品..

[HttpPost] 
     public ActionResult Registration(Student student) 
     { 

      if (ModelState.IsValid) 
      { 

       studentrepository.Save(student); 
      } 
      return View(student); 
     } 

这完全适用于我..

但我希望能够更新这个相同的字段柜面学生更改这些字段应该覆盖数据库中的现有记录。 我已经看过我的教程,其中学生身份证号码作为动作链接传递,然后覆盖现有记录。

但是,我想要的是学生能够使用相同的按钮和相同的视图编辑相同的窗体display.any帮助将不胜感激。

+1

你只需要检查学生ID是否存在于数据库中。如果是,则进行更新,如果没有,则进行创建。 – heymega 2014-12-08 09:07:26

+0

对不起,如何“更新”而不是“保存”? – 2014-12-08 10:27:41

你只需要改变你储存库的方法是这个样子:

public class EFRepository:IStudentRepository 
{ 
    private EFDBContext context = new EFDBContext(); 

    public IQueryable<Student> Student{ get { return context.Students; } } 


    public void Save(Student student) 
    { 

     if (student.ID == 0) 
     { 

      context.Students.Add(student); 
     } 
     else 
     { 
      Student existingStudent = context.Students.FirstOrDefault(x => x.ID == student.ID); 

      if(existingStudent != null) 
      { 
       context.Entry(existingStudent).CurrentValues.SetValues(student); 
       context.Entry(existingStudent).State = System.Data.Entity.EntityState.Modified; 

      } 

     } 

     context.SaveChanges(); 
} 

,或者您可以使用实体框架连接方法,因为这将自动跟踪对象的状态和更新细节

+1

为什么还没有被提高呢?这是一个完美的解决方案,干净,简单。纯ASP.NET的方式去。 – 2017-05-23 15:42:47