MVCで複数のドロップダウンを使用して検索をフィルタリングすると、nullモデルが得られます

スマイリーロッド

現在MVCアプリケーションを構築しており、選択したドロップダウンに基づいて車のリストを表示しようとしています。ユーザーが検索するために複数のドロップダウンを選択する必要はありません。ドロップダウンの任意の組み合わせでコードを検索できるようにしたいのです。If elseステートメントを使用してコードを記述し始めましたが、これがベストプラクティスだとは思わなかったため、調査を行って、結果をフィルタリングする別の方法を見つけました。私が抱えている問題は、モデルでnull値を取得していることです。

これは私のモデルです

    public partial class Car 
{

    private Ignition_Hub_DBEntities Context;

    public IQueryable<Car> GetProducts(Car searchModel)
    {
        var result = Context.Cars.AsQueryable();
        if (searchModel != null)
        {
            if (searchModel.CarLotID.HasValue)
                result = result.Where(x => x.CarLotID == searchModel.CarLotID);
            if (searchModel.Available.HasValue)
                result = result.Where(x => x.Available == searchModel.Available);
            if (searchModel.ModelID.HasValue)
                result = result.Where(x => x.ModelID == searchModel.ModelID);
             if (searchModel.Model.MakeID.HasValue)
                return result;
            result = result.Where(x => x.Model.MakeID == searchModel.Model.MakeID);
            return result;
        }
        return result;
    }
        public Car()
    {
        Context = new Ignition_Hub_DBEntities();

    }
    public int? CarID { get; set; }
    public string Year { get; set; }

    public string Notes { get; set; }
    public bool? Available { get; set; }
    public string VinNumber { get; set; }
    public int? CarLotID { get; set; }
    public int? ModelID { get; set; }

    public virtual Model Model { get; set; }
    public virtual CarLot CarLot { get; set; }
}

これは私のコントローラーです

        public ActionResult DisplaySearchResults(Car searchModel)
    {

        var business = new Car();
        var model = business.GetProducts(searchModel);
        return PartialView("_Index", model);
}

今、私はエラーでif (searchModel.Model.MakeID.HasValue)エラーが発生し'Object reference not set to an instance of an object.'ます。助けてくれてありがとう!これを達成するためのより良い方法がある場合は、アドバイスしてください。ありがとうございました!

Reza Aghaei

あなたは確認する必要がありModel、あなたが確認する必要があります検索するときに、検索モデルのプロパティがnullでなく、アクションに渡されたModelLINQクエリ内の要素のプロパティがnullでない場合、比較MakeIDして、検索モデルのプロパティをMakeIDプロパティlinqクエリの要素の。たとえば、あなたがに基づいて検索しようとしている場合MakeIDModel、それが指定されていた場合、あなたは次のようにコードを変更する必要があります。

if (searchModel.Model !=null && searchModel.Model.MakeID.HasValue)
    result = result.Where(x => x.Model !=null && 
        x.Model.MakeID == searchModel.Model.MakeID);

ただし、この投稿をフォローしている場合は、一般的に次のアドバイスに従うことをお勧めします。

  • エンティティモデルをPOCO検索モデルとして使用しないでください。
  • POCOクラスにビジネスロジックを配置しないでください。
  • MakeIDに基づいて検索する場合は、POCO検索モデルに直接含めます。

リンクされた投稿から例を拡張するので、にProductCategoryプロパティがあり、CategoryName他のいくつかのプロパティに基づいて検索することに関心があります。

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Product
{
    public int Id { get; set; }
    public int Price { get; set; }
    public string Name { get; set; }
    public int CategoryId { get; set; }
    public Category Category { get; set; }
}

ProductSearchModelクラスを作成し、それらに基づいて検索するいくつかのフィールドを配置できます

public class ProductSearchModel
{
    public int? Id { get; set; }
    public int? PriceFrom { get; set; }
    public int? PriceTo { get; set; }
    public string Name { get; set; }
    public string CategoryName { get; set; }
}

次に、次のように検索ロジックをProductBusinessLogicクラスに配置できます

public class ProductBusinessLogic
{
    private YourDbContext Context;
    public ProductBusinessLogic()
    {
        Context = new YourDbContext();
    }

    public IQueryable<Product> GetProducts(ProductSearchModel searchModel)
    {
        var result = Context.Products.AsQueryable();
        if (searchModel != null)
        {
            if (searchModel.Id.HasValue)
                result = result.Where(x => x.Id == searchModel.Id);
            if (!string.IsNullOrEmpty(searchModel.Name))
                result = result.Where(x => x.Name.Contains(searchModel.Name));
            if (searchModel.PriceFrom.HasValue)
                result = result.Where(x => x.Price >= searchModel.PriceFrom);
            if (searchModel.PriceTo.HasValue)
                result = result.Where(x => x.Price <= searchModel.PriceTo);
            if (!string.IsNullOrEmpty(searchModel.CategoryName))
                result = result.Where(x => x.Category !=null && 
                    x.Category.Name.Contains(searchModel.Name));
        }
        return result;     
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

jqueryを使用してドロップダウンで複数の値をフィルタリングする

分類Dev

複数の選択ドロップダウンリストフィルタリングの組み合わせを使用してMongoDBドキュメントを検索するにはどうすればよいですか?

分類Dev

チェックボックス付きの複数選択ドロップダウンを使用して、jqueryデータテーブルの列を検索またはフィルタリングします

分類Dev

Django:HTMLで複数の入力フィールド(ドロップダウン付き)を使用してDjangoモデルの複数のフィールドを検索する

分類Dev

複数のドロップダウンを使用して、単一のビューで2つのモデルを使用してデータテーブルをフィルタリングする

分類Dev

Vuejsを使用して複数の選択オプション(ドロップダウン)からリストをフィルタリングする方法

分類Dev

複数のドロップダウンを使用した jQuery の「検索」および「フィルター」によるフィルタリング

分類Dev

テキストボックスとドロップダウンリストを使用してテーブルを検索し、データベースをフィルタリングします (リアルタイム検索)

分類Dev

マルチレベルインデックスを使用してPandasデータフレームでグループ化とローリングウィンドウを実行すると、インデックスエントリが重複します

分類Dev

ドロップダウンで角度を使用してjsonデータをフィルタリングする

分類Dev

Lodashを使用して、複数の親と複数の子からのデータを検索/フィルタリングします

分類Dev

GridView :: widget、Yii2の検索ボックスでフィルタリングを使用して単純なドロップダウンリストを使用するにはどうすればよいですか?

分類Dev

複数の選択ドロップダウンを使用してHTMLテーブルをフィルタリングする

分類Dev

すべてのワークシートをフィルタリングするドロップダウンまたは複数選択フィルターをダッシュボードに作成するにはどうすればよいですか?

分類Dev

検索フィルターとドロップダウンをリスト内の複数の値にバインドするにはヘルプが必要です

分類Dev

角度を使用してオプションのドロップダウンリストからフィルタリング/検索

分類Dev

Vue.jsを使用してモーダルが閉じられている場合に、モーダルウィンドウのデータをデフォルトにリセットする正しい方法はありますか?

分類Dev

MSSQLで複数の検索文字列を使用して複数のフィールドをフィルタリングする

分類Dev

複数選択の検索可能なドロップダウンを作成しようとしていますが、フォームグループの定義でエラーが発生します

分類Dev

分析ウィンドウSQL関数を使用して同じデータセットの行のグループでID値を検索する方法

分類Dev

両方のドロップダウン入力を使用してJavaScriptをフィルタリングする

分類Dev

複数の値を使用して配列フィールドでフィルタリングするノードを検索する方法

分類Dev

辞書を使用して、返された状態をフィルタリング用の選択ドロップダウンにマップし、重複を生成して、一意のキーを削除して添付しようとしています

分類Dev

日付を使用してすべてのドロップダウンをドロップダウンにフィルタリングする

分類Dev

両方のウィンドウを実行している2つの異なるデスクトップでメモ帳でcsvファイルを開くと、異なる結果が得られます

分類Dev

ドロップダウンリストからフィルターを作成しようとして、MVCを使用してASP.NETを構築する

分類Dev

パイプを使用して、いくつかのチェックボックスと検索フィールドでデータフィルタリングを整理するにはどうすればよいですか?

分類Dev

ドロップダウンオプションに従ってデータをフィルタリングすると反応します

分類Dev

asp mvcの最初のドロップダウンリストで選択したものに従ってドロップダウンリストをフィルタリングするにはどうすればよいですか?

Related 関連記事

  1. 1

    jqueryを使用してドロップダウンで複数の値をフィルタリングする

  2. 2

    複数の選択ドロップダウンリストフィルタリングの組み合わせを使用してMongoDBドキュメントを検索するにはどうすればよいですか?

  3. 3

    チェックボックス付きの複数選択ドロップダウンを使用して、jqueryデータテーブルの列を検索またはフィルタリングします

  4. 4

    Django:HTMLで複数の入力フィールド(ドロップダウン付き)を使用してDjangoモデルの複数のフィールドを検索する

  5. 5

    複数のドロップダウンを使用して、単一のビューで2つのモデルを使用してデータテーブルをフィルタリングする

  6. 6

    Vuejsを使用して複数の選択オプション(ドロップダウン)からリストをフィルタリングする方法

  7. 7

    複数のドロップダウンを使用した jQuery の「検索」および「フィルター」によるフィルタリング

  8. 8

    テキストボックスとドロップダウンリストを使用してテーブルを検索し、データベースをフィルタリングします (リアルタイム検索)

  9. 9

    マルチレベルインデックスを使用してPandasデータフレームでグループ化とローリングウィンドウを実行すると、インデックスエントリが重複します

  10. 10

    ドロップダウンで角度を使用してjsonデータをフィルタリングする

  11. 11

    Lodashを使用して、複数の親と複数の子からのデータを検索/フィルタリングします

  12. 12

    GridView :: widget、Yii2の検索ボックスでフィルタリングを使用して単純なドロップダウンリストを使用するにはどうすればよいですか?

  13. 13

    複数の選択ドロップダウンを使用してHTMLテーブルをフィルタリングする

  14. 14

    すべてのワークシートをフィルタリングするドロップダウンまたは複数選択フィルターをダッシュボードに作成するにはどうすればよいですか?

  15. 15

    検索フィルターとドロップダウンをリスト内の複数の値にバインドするにはヘルプが必要です

  16. 16

    角度を使用してオプションのドロップダウンリストからフィルタリング/検索

  17. 17

    Vue.jsを使用してモーダルが閉じられている場合に、モーダルウィンドウのデータをデフォルトにリセットする正しい方法はありますか?

  18. 18

    MSSQLで複数の検索文字列を使用して複数のフィールドをフィルタリングする

  19. 19

    複数選択の検索可能なドロップダウンを作成しようとしていますが、フォームグループの定義でエラーが発生します

  20. 20

    分析ウィンドウSQL関数を使用して同じデータセットの行のグループでID値を検索する方法

  21. 21

    両方のドロップダウン入力を使用してJavaScriptをフィルタリングする

  22. 22

    複数の値を使用して配列フィールドでフィルタリングするノードを検索する方法

  23. 23

    辞書を使用して、返された状態をフィルタリング用の選択ドロップダウンにマップし、重複を生成して、一意のキーを削除して添付しようとしています

  24. 24

    日付を使用してすべてのドロップダウンをドロップダウンにフィルタリングする

  25. 25

    両方のウィンドウを実行している2つの異なるデスクトップでメモ帳でcsvファイルを開くと、異なる結果が得られます

  26. 26

    ドロップダウンリストからフィルターを作成しようとして、MVCを使用してASP.NETを構築する

  27. 27

    パイプを使用して、いくつかのチェックボックスと検索フィールドでデータフィルタリングを整理するにはどうすればよいですか?

  28. 28

    ドロップダウンオプションに従ってデータをフィルタリングすると反応します

  29. 29

    asp mvcの最初のドロップダウンリストで選択したものに従ってドロップダウンリストをフィルタリングするにはどうすればよいですか?

ホットタグ

アーカイブ