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

问题描述 投票:2回答:3

控制器得到行动

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

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

c# asp.net asp.net-mvc asp.net-mvc-4 html.dropdownlistfor
3个回答
5
投票

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

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

1
投票

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

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

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

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

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


0
投票

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

    private List<StockFundamental> GetEmptyList()
    {
        StockFundamental stockFund = new StockFundamental();
        List<StockFundamental> stockFundList = new List<StockFundamental>();
        stockFundList.Add(stockFund);
        return stockFundList;
    }
© www.soinside.com 2019 - 2024. All rights reserved.