2

ユーザーがmultiselectlistsome または none を選択できる場所がありますinputvoltages。ユーザーが no を選択すると、呼び出し時にInputVoltagesクエリがスローされます。空のリストが返されないのはなぜですか?null exception.Tolist()

MVC5 C# とエンティティ フレームワーク 6 を使用しています。

リポジトリ

public IQueryable<InputVoltage> All
{
    get { return context.InputVoltages; }
}

コントローラ

var newInputVoltages = unitOfWorkPds.InputVoltageRepository
    .All.Where(m => engineeringPdsEditViewModel.SelectedInputVoltages
        .Contains(m.Id))
    .ToList<InputVoltage>();

Allリストを返しますがSelectedInputVoltages、何も選択されていない場合は null です。それが問題なのだろうかと思いました。

このクエリを使用して、インデックス ページに where ステートメントを追加すると、呼び出し時に null エラーが発生しません。ToList

IQueryable<EngineeringPdsIndexViewModel> query = 
    (from a in context.EngineeringPds
     select new EngineeringPdsIndexViewModel
     {
         Id = a.Id,
         Name = a.Name,
         Status = a.Status,
         AnnualQuantities = a.AnnualQuantities,
         ToMarketDate = a.ToMarketDate,
         SubmittedBy = a.SubmittedBy,
         TargetPrice = a.TargetPrice
     });

したがって、ブライアンは何が悪いのかについて正しい考えを持っていると思いますが、ここに拡張された問題があります。

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

それから

pdsEditViewModel.InputVoltageList = inputVoltagesList.Select(m => new SelectListItem { Text = m.Name, Value = m.Id.ToString() });  in my view I hav@Html.ListBoxFor(m => m.SelectedApprovals, Model.ApprovalList)

しかし、ユーザーが何も選択しないと、selectedInputvoltages がポスト コントローラー アクションに null として入ります。どうすれば空のリストとして入りますか?

アップデート

同じ問題に遭遇した人は誰でも、ブライアンの最初の回答で問題が説明されています。空のリストを含む ListBox を送信するための回避策については、こちらを参照してください。

Asp.net MVC の ListBoxFor 選択ボックスから null リストの代わりに空のリストを返すにはどうすればよいですか?

4

4 に答える 4

3

IEnumerable<T>またはの BCL で定義された、nullIQueryable<T>を返すIEnumerable<T>、または返さない拡張メソッド。IQueryable<T>空のコレクションが返される場合がありますが、それは null とは大きく異なります。

これを試して:

var newInputVoltages = engineeringPdsEditViewModel.SelectedInputVoltages == null ?
    unitOfWorkPds.InputVoltageRepository.All : 
    unitOfWorkPds.InputVoltageRepository.All.Where(m => engineeringPdsEditViewModel.SelectedInputVoltages.Contains(m.Id)).ToList();
于 2013-11-01T16:24:43.513 に答える
0

空のリストを取得することはなく、null を返すと予想される動作です。

于 2013-11-01T16:19:09.650 に答える