控制器得到行动
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如何让它作为空列表进入?
我喜欢这两个答案在使用其中一个有什么好处吗?
要么确保它在控制器(或模型/视图模型)中初始化,如果为null,或者可能(丑陋的代码)使用coalesce运算符在运行时初始化为null:
@Html.ListBoxFor(m => m.SelectedInputVoltages, Model.InputVoltageList ?? new List<SelectListItem>())
如果在视图模型的构造函数中初始化列表,那么它将始终至少是一个空列表。构建视图模型实例的任何内容都将继续相应地设置列表。
public class SomeViewModel
{
public List<int> SelectedInputVoltages { get; set; }
public SomeViewModel()
{
SelectedInputVoltages = new List<int>();
}
}
这样在null
的实例中它永远不会是SomeViewModel
,无论视图,控制器等。
如果您始终希望视图模型的属性具有默认值,那么放置该视图模型的最佳位置。如果该逻辑被放置在控制器或视图中,则需要在您想要使用它时重复该逻辑。
这是一篇较旧的帖子,但这是我处理返回空列表的方法。
private List<StockFundamental> GetEmptyList()
{
StockFundamental stockFund = new StockFundamental();
List<StockFundamental> stockFundList = new List<StockFundamental>();
stockFundList.Add(stockFund);
return stockFundList;
}