2013-08-28 44 views
2

我正在使用MVC,並創建了一個將值插入數據庫的表單。MVC - 將數據插入到數據庫中

我的數據庫結構有關係:

  • 一個 - >很多
  • 許多 - >許多

例如: 用戶表包含一個外鍵表公司。在我的視圖中,我有一個包含所有公司的下拉列表。

我可能需要的是將數據插入到具有外鍵的表中的工作示例。 我已經搜索並嘗試了很多解決方案,但無法弄清楚如何使其工作。

這裏是我的代碼:

型號:

public class DefaultConnection : DbContext 
    { 
     public DefaultConnection() 
      : base("DefaultConnection") 
     { 
     } 

     public DbSet<User> users{ get; set; } 
    } 

    public class Company 
    { 
     public int Id { get; set; } 
     public string Name{ get; set; } 
    } 
public class User 
    { 
     public int Id { get; set; } 

     [ForeignKey("Company")] 
     public int Id_Company { get; set; } 
     public Company Company{ get; set; } 
    } 

視圖模型:

public class MyViewModel 
    { 
     public MyViewModel() 
     { 
      this.u= new User(); 
      this.cl = new Companylist(); <== another class which i have create a selectlist 
     } 

     public User u{ get; set; } 
     public Companylist cl{get;set;} 
} 

查看:

<ol> 
    <li> 
     @Html.LabelFor(m => m.cl.Ncompany)<br /> 
     @Html.DropDownListFor(o => o.cl.Ncompany, Model.cl.Ncompany, "-- Select --", new { @class = "abc" }) 
    </li> 
    <li> 
     @Html.LabelFor(m => m.u.Name)<br /> 
     <input type="text" name="Name" value="" /> 
    </li> 
</ol> 

控制器:

[HttpPost] 
     public ActionResult Create(MyViewModel model) 
     { 
      if (ModelState.IsValid) 
      { 
       db.users.Add(model);????????????????? 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(model); 
     } 
+0

您也可以在「使用實體框架MVC控制器,具有讀/寫......」'嘗試創建使用選項'一個新的MVC控制器。然後檢查Visual Studio爲控制器和視圖生成的代碼。 – alfoks

+0

您不需要VIewModel中的公司列表。更改視圖模型以保存用戶數據和公司ID,就像用戶實體一樣。 – Nilesh

+0

也許這是你的數據庫的問題?確保應用程序不會每次都重新創建數據庫。 –

回答

5

首先,我們發現您的DropDownListFor沒有設置在這個意義上,下拉是User.Id_Company而不是爲企業名單完全正確。它最有可能的應該是:

<li> 
     @Html.LabelFor(m => m.cl.Ncompany)<br /> 
     @Html.DropDownListFor(o => o.u.Id_Company, Model.cl.Ncompany, "-- Select --", new { @class = "abc" }) 
    </li> 

接下來,在你的控制器,你可以直接從模型插入返回,但在某些時候,你可能會使用領域模型退出(你的數據庫表的型號)並開始使用視圖模型。隨着中說,你可以添加一個新用戶作爲這樣的:

[HttpPost] 
public ActionResult Create(MyViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     var db = new DefaultConnection(); (?? is this what your context is called?) 
     db.users.Add(new User{ 
      Id_Company = model.u.Id_Company, 
      Name = model.u.Name 
     }); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(model); 
} 
+0

謝謝湯米的職位,但現在我得到這個錯誤==>沒有無參數的構造函數爲此對象定義。 – user2232273

+0

現在有什麼不對嗎? – user2232273

+0

你在哪裏聲明你的數據庫變量?你提到的這個錯誤在哪裏發生? – Tommy

1

ViewModelCompanyUser。插入時,您需要將實體與數據庫表實體進行匹配。

嘗試這樣做:

[HttpPost] 
     public ActionResult Create(MyViewModel model) 
     { 
      if (ModelState.IsValid) 
      { 
       db.users.Add(model.User); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(model); 
     } 

插入到表的外鍵應該只是像任何其他插件。假設你有一個公司的數據庫行,它應該運行沒有錯誤。

User user = new User 
{ 
    Id_Company = 1 
} 

db.users.Add(user); 
db.SaveChanges(); 
+0

我嘗試過但沒有成功:( – user2232273

+0

@ user2232273您是否在使用@Html.Beginform()將新數據集中到控制器 –

+0

是的,我爲此做了什麼....這個問題有多麼頭疼 – user2232273