I'm working with MVC and have created a form to insert values into my database.
My database structure has the relationships:
For Example: The User table contains a foreign key to the table Company. In my View, I have a dropdownlist which contains all the companies.
What I probably need is a working example of inserting data into tables with foreign keys. I have searched around and tried many solutions but cannot figure out how to make it work.
Here's my code:
Model:
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; }
}
ViewModel:
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;}
}
View:
<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>
Controller:
[HttpPost]
public ActionResult Create(MyViewModel model)
{
if (ModelState.IsValid)
{
db.users.Add(model);?????????????????
db.SaveChanges();
return RedirectToAction("Index");
}
return View(model);
}
First, it appears that your DropDownListFor is not setup quite right in the sense that the drop down is for User.Id_Company and not for the company list. It most likely should be:
<li>
@Html.LabelFor(m => m.cl.Ncompany)<br />
@Html.DropDownListFor(o => o.u.Id_Company, Model.cl.Ncompany, "-- Select --", new { @class = "abc" })
</li>
Next, in your controller, you can insert directly from the model being returned, but at some point, you are probably going to quit using Domain Models (models of your DB tables) and start to use View Models. With that said, you could add a new user as such:
[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);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With