2017-12-12 23 views
2

を使用して検索し、フィルタに表示からクエリ文字列を非表示にする方法がある - 濾過I基本的なソートを実現するasp.net MVC

コントローラ

public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page) 
     { 
      ViewBag.CurrentSort = sortOrder; 
      ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : ""; 
      ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date"; 

      if (searchString != null) 
      { 
       page = 1; 
      } 
      else 
      { 
       searchString = currentFilter; 
      } 

      ViewBag.CurrentFilter = searchString; 

      var students = from s in db.Students 
          select s; 
      if (!String.IsNullOrEmpty(searchString)) 
      { 
       students = students.Where(s => s.LastName.Contains(searchString) 
             || s.FirstMidName.Contains(searchString)); 
      } 
      switch (sortOrder) 
      { 
       case "name_desc": 
        students = students.OrderByDescending(s => s.LastName); 
        break; 
       case "Date": 
        students = students.OrderBy(s => s.EnrollmentDate); 
        break; 
       case "date_desc": 
        students = students.OrderByDescending(s => s.EnrollmentDate); 
        break; 
       default: // Name ascending 
        students = students.OrderBy(s => s.LastName); 
        break; 
      } 

      int pageSize = 3; 
      int pageNumber = (page ?? 1); 
      return View(students.ToPagedList(pageNumber, pageSize)); 
     } 

コードのインデックスコードをソートしてうまく enter image description here

enter image description here

働いていたものを私が求めていることは同じことを実現する方法はあります画像に示されているようにエンドユーザにクエリパラメータを表示することなく、

ビューモデル - フォームコレクションやルートベースのようなものを使用してこのパラメータを非表示にすることは可能ですか?この例のクエリ文字列のセキュリティに関する問題はありますか? - この例はa私はcontoso大学(マイクロソフトのデモ)を使ってやりたいことをデモしています。このコンテキストでは、クエリ文字列を隠す必要はありませんが、別のコンテキスト(ADO.NETストアドプロシージャを使用)では、

+0

を使用すると、文字列でモデルバインダーを使用して考えがありますか? – maximdumont

+0

これは、スニペットやこれに続くコードが良い点になる場合は、 –

+0

というページがロードされた後で、クエリ文字列の余分な部分をjQuery経由で取り除くことができます。 – user4833581

答えて

1
  1. すべてのクエリ文字列でセキュリティ違反が発生するわけではありません。クエリ文字列に表示すべきでない機密データは何であるかを定義する必要があります。
  2. 「GET」の代わりに「POST」を使用する必要がある場合は、非表示にします。しかし、Fiddlerやブラウザのデバッグツールなどのパッケージスニッフィングツールでは、クエリパラメータは引き続き検出可能です。
  3. コード内にSQL文を作成するだけであれば、SQLインジェクションに注意してください。たとえば、誰かが "; drop table xx;"を渡すかもしれません。クエリ文字列として。
  4. クエリ文字列を暗号化することができます - https://www.aspsnippets.com/Articles/Encrypt-and-Decrypt-QueryString-Parameter-Values-in-ASPNet-using-C-and-VBNet.aspx
+0

何も理由なしにdownvoteを取得しました。しかし、私の努力が誰かに役立つことを願っています。 –

+0

私はあなたの努力を評価しました、私はあなたの答えをdownvoteしていませんでした。私はdownvoteと同じにupvotedので、私を助けている – user4833581

+0

クエリ文字列は、ユーザーがテキストボックスに入力した値です - OPはPOSTを使用できません。ここには「SQLインジェクション」は含まれていません(EFを使用しています)。暗号化は意味をなさない(とにかく可能ではない)。あなたがここに述べたことは、OPの質問とは何の関係もありません。 –

関連する問題