'In ASP.Net MVC Database first , when i try to create a dropdown list which will show values from another table , it gives System.ArgumentNullException
I want to create a dropdown list which shows all the payPeriods which are stored in a seperate table PayPeriod.
<div class="form-group">
@Html.LabelFor(model=>model.TimePeriod.PayPeriodId)
@Html.DropDownListFor(model=>model.TimePeriod.PayPeriodId,new SelectList(Model.PayPeriods, "PayPeriodId","PayPeriodName"),"Select Payperiod", new {@class="form-control"})
</div>
Controller:-
public ActionResult Create(TimePeriodViewModel timePeriodVM)
{
//First get the payperiods from database
var payperiods = db.PayPeriods.ToList();
var payperiod = new PayPeriod
{
PayPeriodId = timePeriodVM.PayPeriod.PayPeriodId
};
var timeperiod = new TimePeriod
{
// TimePeriodID=timePeriodVM.TimePeriod.TimePeriodID,
PersonnelID = timePeriodVM.TimePeriod.PersonnelID,
StartDate = timePeriodVM.TimePeriod.StartDate,
EndDate = timePeriodVM.TimePeriod.EndDate,
PayPeriod=timePeriodVM.TimePeriod.PayPeriod,
TotalAvgHours = timePeriodVM.TimePeriod.TotalAvgHours,
TotalTimeSheetHours = timePeriodVM.TimePeriod.TotalTimeSheetHours,
TotalOvertime = timePeriodVM.TimePeriod.TotalOvertime
};
var dailyregister = new DailyRegister
{
//TimePeriodID=timePeriodVM.TimePeriod.TimePeriodID,
Day = timePeriodVM.DailyRegister.Day,
Date = timePeriodVM.DailyRegister.Date,
PaidHours = timePeriodVM.DailyRegister.PaidHours,
AgreedHours= timePeriodVM.DailyRegister.AgreedHours,
DetailsOfWorkTimeSheet = timePeriodVM.DailyRegister.DetailsOfWorkTimeSheet,
OverTime = timePeriodVM.DailyRegister.OverTime,
};
if (ModelState.IsValid)
{
db.TimePeriods.Add(timeperiod);
db.DailyRegisters.Add(dailyregister);
db.PayPeriods.Add(payperiod);
db.SaveChanges();
return RedirectToAction("Index");
}
TimePeriodViewModel:-
public class TimePeriodViewModel
{
public IEnumerable<Personnel> Personnels { get; set; }
//public Personnel Personnel { get; set; }
public int PersonnelID { get; set; }
public IEnumerable<DailyRegister> DailyRegisters { get; set; }
public DailyRegister DailyRegister { get; set; }
public TimePeriod TimePeriod { get; set; }
public IEnumerable<PayPeriod> PayPeriods { get; set; }
public PayPeriod PayPeriod { get; set; }
}
Also, one thing i noticed is when i created foriegn key relationship between TimePeriod and PayPeriod-> it shows in edmx PayPeriod1 in navigation properties of Timeperiod table. TimeSheet.edmx
Solution 1:[1]
Update the CREATE GET method which will actually pull the dropdown list values from database.
public ActionResult Create()
{
ViewBag.PersonnelID = new SelectList(db.Personnels, "PersonnelID", "FirstName");
var payperiods = db.PayPeriods.ToList();
var personnel = db.Personnels.ToList();
//var dailyRegister = db.DailyRegisters;
var model = new TimePeriodViewModel
{
Personnels = personnel,
PayPeriods=payperiods
// DailyRegister= DailyRegister
};
return View(model);
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
