Home > Software engineering >  MVC- Count Number of Records
MVC- Count Number of Records

Time:04-14

Edit My view is using the Employer model. Employer and JobPosting have a 1:M relationship. I will share more of the view for context.

Context: In my application, I want to show the Employer the number of applicants who applied for their JobPosting. The code that I currently have written is not returning any value. It's not throwing any errors- but it's not working either. I'm pretty sure the issue is in my controller, but I'll provide the Model and View as well.

Controller:

 public ActionResult AppCount()
        {
            foreach (var app in db.JobPostings.ToList())
            {
                int id = app.JobPostingID;
                int count= db.Applications.Where(a => a.JobPostingID == id).Count();
                app.AppCount = count;
                ViewBag.AppCount = count;
            }
            return View();
 }

View:

  @model InTurn_Model.Employer
.
.
.
        <h2>My Job Postings</h2>
        <p>
            @Html.ActionLink("Create New", "Create", "JobPostings", null, null)
        </p>
        <div id="employeeContainer"></div>
        <table >
        
            <tr>
                <th>Position</th>
                <th>Job Type</th>
                <th>Number of Applicatiosn</th>
                <th></th>
            </tr>
        
            @foreach (var item in Model.JobPostings)
            {
                if (item.EmployerID == Model.EmployerID)
                {
                    <tr>
        
                        <td>
                            @Html.DisplayFor(model => item.Position)
                        </td>
                        <td>
                            @Html.DisplayFor(model => item.JobType)
                        </td>
                        <td>@ViewBag.AppCount</td>
                        <td>@Html.ActionLink("Details", "Details", "JobPostings", new { id = item.JobPostingID }, null) </td>
        
                    </tr>
                }
            }
        </table>

Model:

  [MetadataType(typeof(JobPostingMetaData))]
    public partial class JobPosting
    {
        public int AppCount { get; set; }
        private sealed class JobPostingMetaData
        {
            [Display(Name = "Job Posting ID")]
            public int JobPostingID { get; set; }
            [Display(Name = "Employer ID")]
            public int EmployerID { get; set; }
            [Display(Name = "Description")]
            public string Desc { get; set; }
            [Display(Name = "Job Type")]
            public JobType JobType { get; set; }
            [Display(Name = "Employment Type")]
            public TimeType TimeType { get; set; }
            [DataType(DataType.Currency)]
            public decimal Wage { get; set; }

            
        }
    }

CodePudding user response:

There are two problems that I see.

First, you are not passing Model from controller to view. However, you are iterating through Model.JobPostings. It is empty.

Second, you assign ViewBag.AppCount in the loop. So, all values, except for the last one are lost. But if you fix the first problem (use Model instead of ViewBag) - the second might go away by itself.

CodePudding user response:

You need to specify the model in the view with @model:

@model YourNameSpace.JobPosting

Then return that model to the view:

 public ActionResult AppCount()
        {
            foreach (var app in db.JobPostings.ToList())
            {
                int id = app.JobPostingID;
                int count= db.Applications.Where(a => a.JobPostingID == id).Count();
                app.AppCount = count;
                ViewBag.AppCount = count;
            }
            return View(app);
 }

This will make the values in the model available to the view. There is no need to use ViewBag, as AppCount is part of the model.

  • Related