2

控制器获取动作

IList<InputVoltage> inputVoltagesList = unitOfWorkPds.InputVoltageRepository.GetAll.ToList();

pdsEditViewModel.InputVoltageList = inputVoltagesList.Select(m => new SelectListItem { Text = m.Name, Value = m.Id.ToString() }); 

视图模型

    public IEnumerable<SelectListItem> InputVoltageList { get; set; }
    public List<int> SelectedInputVoltages { get; set; }

看法

    @Html.ListBoxFor(m => m.SelectedInputVoltages, Model.InputVoltageList)

我想在用户没有选择时收到一个空列表,selectedInputvoltages 进入我的后控制器操作为空我如何让它作为一个空列表进入?

我喜欢这两个答案,使用其中一个有什么好处吗?

4

2 回答 2

5

如果为空,请确保它在控制器(或模型/视图模型)中初始化,或者(尽管代码很丑)如果为空,则使用合并运算符动态初始化:

@Html.ListBoxFor(m => m.SelectedInputVoltages, Model.InputVoltageList ?? new List<SelectListItem>())
于 2013-11-01T18:10:26.377 回答
2

如果您在视图模型的构造函数中初始化列表,那么它将始终至少是一个空列表。任何构建视图模型实例的东西都将继续相应地设置列表。

public class SomeViewModel
{
    public List<int> SelectedInputVoltages { get; set; }

    public SomeViewModel()
    {
        SelectedInputVoltages = new List<int>();
    }
}

这样,无论视图、控制器等如何,它都不会出现null在 的实例中。SomeViewModel

如果您总是希望视图模型的属性具有默认值,那么将其放在视图模型中的最佳位置。如果该逻辑被放置在控制器或视图中,那么在您想要使用它的任何时候都需要重复它。

于 2013-11-01T18:12:39.030 回答