DropDownListFor не привязан к свойству модели - PullRequest
0 голосов
/ 07 февраля 2012

Я не знаю, почему выпадающий список не работает в данном конкретном случае:

Я знаю, что у меня ProjectID> 0, но в выпадающем списке я всегда вижу первый выбранный элемент.

Контроллер:

Helpers h = new Helpers();

[HttpGet]
[ActionName("Timesheet")]
public ActionResult TimeSheet(LoggedAssociate assoc, DateChooserModel model)
{            
    List<TimeReport> timeReports = db.TimeReports.Include("TimeEntries.Project").Where(
        tr => tr.AssociateID == assoc.ID &&
        tr.DateSubmitted >= model.StartDate &&
        tr.DateSubmitted <= model.FinishDate).ToList();

    ViewBag.Projects = h.GetProjects(0);

    return View(timeReports);
}     

Помощник:

public class Helpers
{
    public MyRepository db = new MyRepository();

    public IEnumerable<SelectListItem> GetProjects(short? selectedValue)
    {
        List<SelectListItem> _projects = new List<SelectListItem>();
        _projects.Add(new SelectListItem() { Text = "Project...", Value = "0", Selected = selectedValue == 0 });
        foreach (var project in db.GetProjects())
        {
            _projects.Add(new SelectListItem()
            {
                Text = project.Name,
                Value = project.Id.ToString(),
                Selected = selectedValue > 0 && selectedValue.Equals(project.Id)
            });
        }
        return _projects;
    }  
}

Вид:

@using Project.DataAccess.DataModels
@model List<TimeReport>

@{
    ViewBag.Title = "TimeSheet";
    Layout = "~/Views/_Layout.cshtml";
    int index = 0;   // i use this variables to manage collections with binder 
    int index2 = 0;
}

@using (Html.BeginForm())
{
foreach (TimeReport t in Model)
{
   //
   foreach (TimeEntry te in t.TimeEntries)
   {
       //
       @Html.DropDownListFor(model => model[index].TimeEntries[index2].ProjectId, 
           (IEnumerable<SelectListItem>)ViewBag.Projects)
       //
       index2++;
    }  
    //
    index++;
}
<input type="submit" value="Submit" />
}

Также в Firebug я вижу:

<select name="[0].TimeEntries[0].ProjectId">      
    <option selected="selected" value="0">Project...</option>
    <option value="1">First Project</option>
    <option value="2">Second Project</option>
</select>

1 Ответ

0 голосов
/ 07 февраля 2012

Похоже, вы вызываете свою функцию "GetProjects" с параметром "0" ... поэтому он всегда будет выбирать этот первый SelectItem.

ViewBag.Projects = h.GetProjects(0);

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...