如何从Asp.net MVC中的ListBoxFor选择框返回空列表而不是空列表?

时间:2013-11-01 18:07:36

标签: c# asp.net asp.net-mvc asp.net-mvc-4 html.dropdownlistfor

控制器获取行动

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进入我的帖子控制器操作时,我希望收到一个空列表null如何让它作为空列表进入?

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

3 个答案:

答案 0 :(得分:5)

要么确保它在控制器(或模型/视图模型)中初始化,如果为null,或者可能(丑陋的代码)使用coalesce运算符在运行时初始化为null:

@Html.ListBoxFor(m => m.SelectedInputVoltages, Model.InputVoltageList ?? new List<SelectListItem>())

答案 1 :(得分:1)

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

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

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

这种方式在null的实例中永远不会是SomeViewModel,无论视图,控制器等等。

如果您始终希望视图模型的属性具有默认值,那么放置视图模型的最佳位置。如果该逻辑被放置在控制器或视图中,则需要在您想要使用它时重复该操作。

答案 2 :(得分:0)

这是一篇较旧的帖子,但这就是我处理返回空列表的方法。

    private List<StockFundamental> GetEmptyList()
    {
        StockFundamental stockFund = new StockFundamental();
        List<StockFundamental> stockFundList = new List<StockFundamental>();
        stockFundList.Add(stockFund);
        return stockFundList;
    }