Model的属性没有绑定到multiselect元素

时间:2018-01-26 14:28:16

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

MVC项目中,我试图像这样呈现ListBox元素:

@for (int i = 0; i < 5; i++) {
    @Html.ListBoxFor(
        model => model.PropertyArray[i],
        Model.SelectList[i],
        new { id = "id_" + i, }
    )
}

并且属性本身具有以下格式:

private List<int[]> propertyArray
public List<int[]> PropertyArray
{
    get
    {
        var result = new List<int[]>(5);
        // populate data
        return result;
    }
    set
    {
        this.propertyArray = value;
    }
}

问题是在加载模型时没有调用getter。如果我要将属性类型更改为int[]那么这对单个ListBoxFor元素很有用在迭代周期之外。

但是我的想法是使用堆叠多选,为此我需要一种类型的列表(显然不支持?)。

我很高兴听到有关如何将数据绑定到一个列表中的多个多选项的建议,最好是替代解决方案建议。

1 个答案:

答案 0 :(得分:0)

问题可能是您自己设置了创建的输入元素的id属性。相反,让MVC以ModelBinder期望的格式生成id。

@for (int i = 0; i < 5; i++) {
    @Html.ListBoxFor(model => model.PropertyArray[i], Model.SelectList[i])
}

另外,为什么你需要一个特殊的吸气剂和二传手?只需使用默认值并在ViewModel的构造函数中初始化列表。

public class MyViewModel {
    public MyViewModel() {
        PropertyArray = new List<int[]>();
    }

    public List<int[]> PropertyArray { get; set; }
}