2014-12-08 19 views
0
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

回答

1

你只需要改變你儲存庫的方法是這個樣子:

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

相關問題