0

フォームを送信すると、ViewModel へのコース リストが null 値を取得します。これは私のビューモデルです:

public class CandidateViewModel
{
    public string Name { get; set; }
    public IList<CourseViewModel> Courses { get; set; }

    public CandidateViewModel()
    {
        Name = "Kiwanax";
        Courses = new List<CourseViewModel>();
        for (int count = 0; count < 5; ++count)
        {
            Courses.Add(new CourseViewModel( 
                string.Format("Course_{0}", count), 5));
        }
    } 
}

public class CourseViewModel
{
    public long ID { get; set; }
    public string Name { get; set; }
    public OptionViewModel SelectedOption { get; set; }
    public IList<OptionViewModel> Options { get; set; }

    public CourseViewModel(string name, int numberOfOptions) 
    {
        Name = name;
        Options = new List<OptionViewModel>();
        for (int count = 1; count <= numberOfOptions; ++count)
        {
            Options.Add(new OptionViewModel(count.ToString(), 
                string.Format("Option {0}", count)));
        }
        SelectedOption = Options[0];
    }
}

public class OptionViewModel
{
    public string Value { get; set; }
    public string Description { get; set; }
}

わかった。IList に基づいて DropDownLists を作成すると、正常に動作します。

<ul id="cursos">
@for (int count = 0; count < Model.Courses.Count; ++count)
{
    <li>
        @Html.DropDownListFor(i => i.Courses[count].SelectedOption,
            new SelectList(Model.Courses[count].Options, "Value", "Description", Model.Courses[count].SelectedOption))
                @Html.HiddenFor(i => i.Courses[count].ID)
                @Model.Courses[count].Name
            </li>
        }
        </ul>

しかし、フォームから投稿すると、その IList から null 値が取得されます。

4

1 に答える 1

0

ドロップダウンを複雑なプロパティ値にバインドすることはできません:

i => i.Courses[count].SelectedOption

サーバーに送信される対応するプリミティブ型にバインドする必要があります。

i => i.Courses[count].SelectedOption.Value

HTML では、<select>要素は選択された値を単純な文字列型としてサーバーに送信するだけであることに注意してください。

于 2012-11-09T15:59:23.193 に答える