2016-05-11 23 views
0

2つのモデルを持つViewModelがあります。ビュー内でモデルにデータがあるかどうかを確認したい場合:サブモデルのデータがViewModelにあるかどうか確認してください

@if (Model.MyModel1 == Empty) { do something } 

しかし、私はこれを行う方法を理解できません。このチェックを外すとViewが正常に動作し、データがある場合は問題のないモデルのデータを表示できます。私は今日昨日、そして半日も過ごしましたが、ウェブで見つけたさまざまなアプローチを試してみましたが、どれも働いていませんでした。ViewModelsについて話した人はいませんでした。私が試してみました:

Model.MyModel1.Any() 
Model.MyModel1.AsQueryable().Any() 
Model.MyModel1[0].value1 == "" 
Model.MyModel1 == null 
Model.MyModel1.IsEmptyOrNull() 

これらの線に沿ってより多くの..

を、私は2種類のエラーを取得し、私は私が手Model.MyModel1.Any() のような関数使用しようとすると、最初は次のとおりです。

RuntimeBinderException: 'System.Linq.EnumerableQuery<MyThing.Models.MyModel1>' does not contain a definition for 'Any' 

私はModel.MyModel1[0].value1 == nullような何かをしようとすると、私が得る:

RuntimeBinderException: Cannot apply indexing with [] to an expression of type 'System.Linq.EnumerableQuery<MyThing.Models.MyModle1>' 

ViewModelには、次のとおりです。

namespace MyThing.ViewModel 
{ 
    public class combinedModel 
    { 
     public IQueryable<MyModel1> MyModel1{ get; set; } 
     public IQueryable<MyModel2> MyModel1{ get; set; } 
    } 
} 

データがない場合にはコントローラはこのコードを使用しています。

 var combinedModel = new combinedModel(); 
     combinedModel.MyModel1 = Enumerable.Empty<MyModel1>().AsQueryable(); 
     combinedModel.MyModel2 = Enumerable.Empty<MyModel2>().AsQueryable(); 
     return View(combinedModel); 
+4

は、なぜあなたはモデルタイプとして ''のIQueryable <>を使用していますか?どうして 'IEnumerable <>'? – Andrei

+0

@Andreiコントローラ用に投稿したコードは、コントローラコード全体のごく一部です。ほとんどの場合、コントローラーは照会結果をビューに戻しています。私は、クエリ結果があるかどうかを確認するためのクイックチェックを行う 'if'文を持っています。コードセグメントを実行する結果が出ることはありません。クエリ。 – Mrphin

答えて

0

私の状況では、Xiaoy312が指摘しているように、何か不明な理由で私のビューで拡張メソッドを使用することはできません。彼の答えは正しいと思いますが、これを行うにはうまくいかないかもしれませんが、他の誰かが拡張メソッドで同じ問題を抱えている場合には、何をしているのかを投稿しています。私はこのアプローチを試す前にXiaoy312の答えとコメントを読んでいます。

あなたのモデルにデータがある場合は、あなたのビューで拡張メソッドを使用せずに、あなたが使用することができ、確認するには: (Queryable.Count(Model.MyModel1) < 1)

1

あなたはあなたの最初の試み、Model.MyModel1.Any()と接近していました。しかし、シーケンスに要素があるかどうかを調べるので、空であるかどうかを知るためにその結果を否定したいとします。

@if (!Model.MyModel1.Any()) { do something } 
+0

私はこれを試して、 'RuntimeBinderExceptionを取得しました: 'System.Linq.EnumerableQuery 'に 'Any''エラーの定義が含まれていません – Mrphin

+0

' System.Linq'という名前空間が含まれていることを確認してください。 ['IQueryable .Any()'](https://msdn.microsoft.com/en-us/library/bb343630(v = vs.100).aspx)が明確に存在します。 – Xiaoy312

+0

私の知らないことは申し訳ありませんが、あなたが何を意味しているのか分かりません。私はネットプログラマーではありません。コントローラでは 'using System.Linq;'を使用していますが、ビューでは参照がありません。私は何とか私のビューにそれを追加する必要があります、もしそうなら、どのように? – Mrphin

関連する問題