无法从复杂类型的@ Html.RadioButtonFor中获取价值

时间:2014-04-24 13:00:51

标签: asp.net asp.net-mvc-4 razor

我有一个对象列表,每个对象都有嵌套列表,每个列表都有一个日期属性。 我需要能够选择其中一个日期。

模型看起来像这样

public class ViewModel 
{
    public IList<ParentClass> ParentClasses {get;set;}
}

public class ParentClass
{
    public IList<DateSelector> DateSelectors {get;set;}     
    public DateTime SelectedDate {get;set;}
}

public class DateSelector
{
    public DateTime Date {get;set;}
}

在选择操作的视图中:

@using (Html.BeginForm())
{
    for(int i = 0; i < @Model.ParentClasses.Count; i++)
    {
        for(int j = 0; j < @Model.ParentClasses[i].DateSelectors.Count; j++)
        {
            @Html.RadioButtonFor(m => m.ParentClasses[i],
                Model.ParentClasses[i].DateSelectors[j].Date,
                new { @id = Model.ParentClasses[i].DateSelectors[j].Date.ToString("MMddyyyy") })

            @Model.ParentClasses[i].DateSelectors[j].Date.ToShortDateString()

            <br/>
        }
        <button type="submit">Submit</button>
    }

}

视图按照我的预期呈现,但我无法获得所选日期的值。 html渲染类似

<form method="post" action="/Date/SelectDate">

    <input id="04272014" type="radio" value="4/27/2014 12:00:00 AM" name="ParentClasses[0]"></input>

    4/27/2014            

    <br></br>
    <input id="11012014" type="radio" value="11/1/2014 12:00:00 AM" name="ParentClasses[0]"></input>

    11/1/2014            

    <br></br>
    <button type="submit">

        Submit

    </button>

</form>

我非常感谢这里的任何见解,我已经在这个项目上落后了几天。

由于

1 个答案:

答案 0 :(得分:1)

使用Razor已经有一段时间了,但我相信你在Html.RadioButtonFor上的属性选择器的初始lambda是错误的。您正在尝试将该控件绑定到ParentClass实例本身的值而不是ParentClass.SelectedDate。我相信如果你换到:

@Html.RadioButtonFor(m => m.ParentClasses[i].SelectedDate,
Model.ParentClasses[i].DateSelectors[j].Date,
new { @id = Model.ParentClasses[i].DateSelectors[j].Date.ToString("MMddyyyy") })

这对你来说可能有用,如果它仍然无法发布回来,我会看到如何处理样本。