2015-06-17 3 views
1

My ViewModel выглядит следующим образом:DropDownListFor всегда возвращают нуль на контроллер

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

Мой контроллер:

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

И, наконец, на мой взгляд:

@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> 

DropDownList заполняется правильные значения, но я хотел бы вернуть либо проект, либо строку с ProjectKey на контроллер. Однако, когда я отправляю форму и проверяю значение в параметре в контроллере, она всегда равна нулю, как при попытке вернуть проект, так и при попытке с помощью строки. У меня нет ошибок. Что я делаю не так?

ответ

2

Попробуйте это:

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; } 
} 

В представлении:

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

Ваше действие контроллера:

public ActionResult ChooseProject(ProjectViewModel model) 

Это поможет вам ключ от любого проекта, выбранных в модели .SelectedProjectKey, и вы можете использовать это в своем контроллере selectproject action method, чтобы делать все, что вы планировали.

Смежные вопросы