控制器获取行动
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如何让它作为空列表进入?
我喜欢这两个答案,使用其中一个有什么好处吗?
答案 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;
}