2013-07-23 2 views
0

У меня есть несколько DropDownListFor, и выбранный элемент не отображается. Переменная, сохраняющая выбранный элемент, заполняется правильно.SelectedItem для нескольких DropDownListДля не выбрано

Херес код

Модели

вид Модель

public class StepFourView 
{ 
    #region Public Properties 
    public IEnumerable<PulldownItem> Levels { get; set; } 
    public IEnumerable<PulldownItem> Approaches { get; set; } 
    public IEnumerable<PulldownItem> Types { get; set; } 
    public StepFour StepFour{ get; set; } 
    #endregion 
} 

StepFourModel

[Table(Name = "StepFours")] 
public class StepFour : ICarStep 
{ 
    #region Fields 

    /// <summary> 
    /// The attachments 
    /// </summary> 
    private readonly EntitySet<Assessment> assessments = new EntitySet<Assessment>(); 

    /// <summary> 
    /// The update check. 
    /// </summary> 
    private string updateCheck; 

    #endregion 

    #region Public Properties 

    /// <summary> 
    /// Gets the attachments. 
    /// </summary> 
    [Association(ThisKey = "ReportId", Storage = "assessments", OtherKey = "ReportId")] 
    public EntitySet<Assessment> Assessments 
    { 
     get 
     { 
      return this.assessments; 
     } 
    } 

...

Модель оценки

[Table(Name = "Assessments")] 
public class Assessment 
{ 
    #region Public Properties 


    /// <summary> 
    /// Gets or sets the id. 
    /// </summary> 
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] 
    public int Id { get; set; } 

    /// <summary> 
    /// Gets or sets the report id. 
    /// </summary> 
    [Column(UpdateCheck = UpdateCheck.Never)] 
    public int ReportId { get; set; } 

    /// <summary> 
    /// Gets or sets the type id. 
    /// </summary> 
    [Column(UpdateCheck = UpdateCheck.Never)] 
    public int TypeId { get; set; } 

    /// <summary> 
    /// Gets or sets the level id. 
    /// </summary> 
    [Column(UpdateCheck = UpdateCheck.Never)] 
    public int LevelId { get; set; } 

    /// <summary> 
    /// Gets or sets the approach id. 
    /// </summary> 
    [Column(UpdateCheck = UpdateCheck.Never)] 
    public int ApproachId { get; set; } 

    /// <summary> 
    /// Gets or sets the program area. 
    /// </summary> 
    [Column(UpdateCheck = UpdateCheck.Never)] 
    public string ProgramArea { get; set; } 

    #endregion 
} 

PulldownItem Модель

public class PulldownItem 
{ 
    public int Value { get; set; } 

    public string Text { get; set; } 

} 

Посмотреть

@for (int i = 0 ; i < this.Model.StepFour.Assessments.Count ; i++) 
          { 
           @Html.HiddenFor((x) => x.StepFour.Assessments[i].Id) 
           @Html.HiddenFor((x) =>    
               x.StepFour.Assessments[i].ReportId) 
           <tr id="program_area1"> 
            <td> 
             @Html.TextBoxFor(x => 
       x.StepFour.Assessments[i].ProgramArea, new { style = "width: 190px;" }) 
            </td> 
            <td> 
             @Html.DropDownListFor(x => 

             x.StepFour.Assessments[i].LevelId, new 
        SelectList(this.Model.Levels, "Value", "Text"), new { }) 
             @Html.HiddenFor(x => 
            x.StepFour.Assessments[i].LevelId) 
            </td> 
            <td> 
             @Html.DropDownListFor(x => 
x.StepFour.Assessments[i].TypeId, new SelectList(this.Model.Types, "Value", "Text"), 

new { }) 
            @Html.HiddenFor(x => 
x.StepFour.Assessments[i].TypeId) 
            </td> 
            <td> 
             @Html.DropDownListFor(x => 
    x.StepFour.Assessments[i].ApproachId, new SelectList(this.Model.Approaches, "Value", 
    "Text"), new {}) 
            @Html.HiddenFor(x => 
    x.StepFour.Assessments[i].ApproachId) 
            </td> 
           </tr> 
          } 

Любые идеи, почему Pulldowns не выбрать значения из оценок? Пользователь должен иметь возможность динамически добавлять оценки.

Спасибо!

ответ

2

Прежде всего, вам не нужно определять свой собственный класс PulldownItem. Вы можете использовать SelectListItem. Таким образом, ваш ViewModel будет выглядеть следующим образом:

public class StepFourView 
{ 
    #region Public Properties 
    public IEnumerable<SelectListItem> Levels { get; set; } 
    public IEnumerable<SelectListItem> Approaches { get; set; } 
    public IEnumerable<SelectListItem> Types { get; set; } 
    public StepFour StepFour{ get; set; } 
    #endregion 
} 

Тогда, на ваш взгляд, ваше падение вниз списки будет выглядеть следующим образом:

@Html.DropDownListFor(x => 
    x.StepFour.Assessments[i].ApproachId, new SelectList(this.Model.Approaches, "Value", 
    "Text", Model.StepFour.Assessments[i].AppreachId)) 

Кстати, вы не должны даже петли через ваши оценки. Просто создайте частичное представление для Оценки, назовите его Assessment.cshtml и поместите его под заголовками Views/Shared/EditorTemplates, затем в главном виде вы можете:

@Html.EditorFor(model => model.Assessments) 
Смежные вопросы