spersson
spersson

Reputation: 550

DropDownListFor always return null to controller

My ViewModel looks like this:

public class ProjectViewModel
    {
        public ICollection<Project> Projects { get; set; }
    }

My controller:

    [HttpPost]
    [Route("ChooseProject")]
    public ActionResult ChooseProject(Project projects)
    {
        return RedirectToAction("Index", "Application");
    }

And finally my view:

@using ServicePortal.Web.Controllers
@model ServicePortal.Web.Models.ProjectViewModel
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
    ViewBag.Title = "Choose project";
}

<div class="pure-form pure-form-aligned">
    @using (Html.BeginForm("ChooseProject", "Login", FormMethod.Post))
    {
        @Html.AntiForgeryToken()
        <div class="innerForm formgroup">
            @Html.ValidationSummary(true, "", new { @class = "" })

            @Html.DropDownListFor((model => model.Projects), new SelectList(Model.Projects,"ProjectKey", "ProjectName"))

            <div class="row">
                <button type="submit" class="button pull-right">Go on</button>,
            </div>
        </div>
    }
</div>

The dropdownlist is populated with the correct values, but I would like to return either a Project or a string with ProjectKey to the controller. However, when I submit the form and check the value in the parameter in the controller, it is always null, both when I try to return a Project and when I try with string. I don't get any errors. What am I doing wrong?

Upvotes: 1

Views: 335

Answers (1)

Brad C
Brad C

Reputation: 2982

Try this out:

public class ProjectViewModel
{
    public string SelectedProjectKey { get; set; }  // string may need to be int depending on what type ProjectKey is in your class
    public ICollection<Project> Projects { get; set; }
}

In the view:

@Html.DropDownListFor((model => model.SelectedProjectKey), new SelectList(Model.Projects,"ProjectKey", "ProjectName"))

Your controller action:

public ActionResult ChooseProject(ProjectViewModel model)

This will get you the key of whatever project you selected in model.SelectedProjectKey and you can use that in your controller chooseproject action method to do whatever you intended.

Upvotes: 2

Related Questions