I would like to join 2 tables in MVC. After I created ViewModel, the View doesn't get any value from controller. I set a break point to see, and in the query
value is null
. There should be something wrong when parsing the data.
My Model:
public class ProgramViewModel
{
[Key]
public string ProgramID { get; set; }
public string ProgramName { get; set; }
[DataType(DataType.Date)]
public DateTime? DateReleased { get; set; }
public string AwardAmount { get; set; }
[DataType(DataType.Date)]
public DateTime? SubmissionDeadline { get; set; }
public string DepartmentName { get; set; }
public string Abbreviation { get; set; }
public Program ProgramVM;
public Department DepartmentVM;
public Agency AgencyVM;
}
[Table("RP_Department")]
public class Department
{
[Key]
public int DepartmentID { get; set; }
public string DepartmentName { get; set; }
public string ChineseName { get; set; }
public int AgencyID { get; set; }
public virtual ICollection<Program> Programs { get; set; }
}
[Table("[RP_Program]")]
public class Program
{
[Key]
public string ProgramID { get; set; }
public string ProgramName { get; set; }
[DataType(DataType.Date)]
public DateTime? SubmissionDeadline { get; set; }
public int AgencyID { get; set; }
public virtual Agency Agency { get; set; }
[ForeignKey("FundingLevel")]
public int LevelID { get; set; }
public FundingLevel FundingLevel { get; set; }
[ForeignKey("Department")]
public int DepartmentID { get; set; }
public virtual Department Department { get; set; }
[DataType(DataType.Date)]
public DateTime? DateReleased { get; set; }
[Table("RP_Agency")]
public class Agency
{
[Key]
public int AgencyID { get; set; }
public string Abbreviation { get; set; }
public string Description { get; set; }
public string ChineseName { get; set; }
public virtual ICollection<Program> Programs { get; set; }
}
My Controller:
public ActionResult All()
{
List<Program> program = new List<Program>();
List<Department> departments = new List<Department>();
List<Agency> agency = new List<Agency>();
var query = (from p in program
join d in departments
on p.DepartmentID equals d.DepartmentID
join a in agency
on p.AgencyID equals a.AgencyID
orderby p.SubmissionDeadline descending
select new ProgramViewModel(){
ProgramID = p.ProgramID,
ProgramName = p.ProgramName,
DateReleased = p.DateReleased,
AwardAmount = p.AwardAmount,
DepartmentName = d.DepartmentName,
Abbreviation = a.Abbreviation
});
return View(query);
}
For My view, I imported @model IEnumerable<Research.ViewModels.ProgramViewModel>
In the very begining.
then
@foreach (var item in Model) {
@Html.DisplayFor(modelItem =>@item.ProgramID)
@Html.DisplayFor(modelItem => @item.ProgramName)
@Html.DisplayFor(modelItem => @item.DateReleased)
@Html.DisplayFor(modelItem => @item.AwardAmount)
@Html.DisplayFor(modelItem => @item.SubmissionDeadline)
@Html.DisplayFor(modelItem => @item.DepartmentName)