ASP NET MVC 5 SeletList DropDownList

433 views Asked by At

I have some problems with SelectList and DropDownList. Ich have the two Models (TimeRecord has a navigation-property to Project):

public class Project
{
    public int ProjectId { get; set; }

    [Required]
    public string ProjectName { get; set; }
}

and

public class TimeRecord
{
    public int TimeRecordId { get; set; }
    public int ProjectId { get; set; }

    public string Description { get; set; }

    public Project TmRecProject { get; set; }
}

In my Controller in the Create-action method the SelectList is pass by ViewBag to the View (till now all is correct working)

    public ActionResult Create()
    {
        ViewBag.ProjectId = new SelectList(db.Projects, "ProjectId", "ProjectName");
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(TimeRecord timeRecord)
    {
        if (ModelState.IsValid)
        {
            db.TimeRecords.Add(timeRecord);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(timeRecord);
    }

Here is the View:

@model SelectListDropDownTest.Models.TimeRecord

@using (Html.BeginForm()) 
{
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>TimeRecord</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    <div class="form-group">
        @Html.LabelFor(model => model.TmRecProject.ProjectId, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("ProjectId", null, new { @class = "form-control" } )
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>
}

In the Create-View I can select a Project from the DropDownList. My Problem is when I pass the Model "TimeRecord" back to the Controller the Project "TmRecProject" is always null.

What is the best way to solve this Problem?

1

There are 1 answers

3
Anadi On

First of all I am not able to understand how are you able to select value from dropdown list as you have not bind your 'ViewBag.ProjectId' with your drop down list. Change in your view and your code will start working !!!!

Change:

Bind the drop down list with the model in View.

@Html.DropDownListFor(model => model.TmRecProject.ProjectId, ViewBag.ProjectId as IEnumerable<SelectListItem>, new { @class = "form-control" })

Others are as it is and you will get data on your post method.