2016-06-28 9 views
0

私は奇妙な問題を抱えています。なぜそれがそれを実行しているのかわかりません。 MVCでASP.NETを使用しています。私は最初に働くインデックスに並べ替えを作成しました。ただし、列が昇順にソートされると、デフォルト値として使用されている列を除いて処理が停止します。つまり、私は2つの列がデフォルトの昇順と降順の並べ替えを持ち、もう1つの列は昇順と降順の並べ替えができるとしましょう。私は最初の列で昇順と降順の間を行き来することができます。しかし、2番目の列では降順でソートされ、次に昇順で並べ替えることができます。次にソートすることはできません。私は理由についての手掛かりがありません。ASP.NET MVC Sort not work

これは私のコントローラで私のインデックスです:

public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page) 
    { 
     ViewBag.CurrentSort = sortOrder; 
     ViewBag.ManSortParm = String.IsNullOrEmpty(sortOrder) ? "man_desc" : ""; 
     ViewBag.ModelSortParm = String.IsNullOrEmpty(sortOrder) ? "model_desc" : "model_asc"; 
     ViewBag.ModDescSortParm = String.IsNullOrEmpty(sortOrder) ? "ModDesc_desc" : "ModDesc_asc"; 

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

     ViewBag.CurrentFilter = searchString; 

     var manufacturermodels = db.ManufacturerModels.Include(m => m.Manufacturer); 

     // var logTypes = from s in db.DeviceLogTypes 
     //    select s; 
     if (!String.IsNullOrEmpty(searchString)) 
     { 

      manufacturermodels = manufacturermodels.Where(s => s.Manufacturer.Manufacturer1.Contains(searchString)); 

     } 
     switch (sortOrder) 
     { 
      case "man_desc": 
       manufacturermodels = manufacturermodels.OrderByDescending(s => s.Manufacturer.Manufacturer1); 
       break; 
      case "model_desc": 
       manufacturermodels = manufacturermodels.OrderByDescending(s => s.Model); 
       break; 
      case "model_asc": 
       manufacturermodels = manufacturermodels.OrderBy(s => s.Model); 
       break; 
      case "ModDesc_desc": 
       manufacturermodels = manufacturermodels.OrderByDescending(s => s.ModelDescription); 
       break; 
      case "ModDesc_asc": 
       manufacturermodels = manufacturermodels.OrderBy(s => s.ModelDescription); 
       break; 
      default: // Name ascending 
       manufacturermodels = manufacturermodels.OrderBy(s => s.Manufacturer.Manufacturer1); 
       break; 
     } 

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

は、私の見解で私は、次のしている:

@using (Html.BeginForm("Manufacturers and Models", "ManufacturerModel", FormMethod.Get)) 
{ 
    <p> 
     Find by Manufacturer: @Html.TextBox("SearchString", ViewBag.CurrentFilter as String) 
     <input type="submit" value="Search" /> 

    </p> 
} 
<table class="table"> 
<tr> 
    <th> 
     @Html.ActionLink("Manufacturer", "Index", new { sortOrder = ViewBag.ManSortParm, currentFilter = ViewBag.CurrentFilter }) 
    </th> 
    <th> 
     @Html.ActionLink("Model", "Index", new { sortOrder = ViewBag.ModelSortParm, currentFilter = ViewBag.CurrentFilter }) 
    </th> 
    <th> 
     @Html.ActionLink("Description", "Index", new { sortOrder = ViewBag.ModDescSortParm, currentFilter = ViewBag.CurrentFilter }) 
    </th> 
    <th> 

    </th> 

    <th></th> 
</tr> 
+0

は、どのようなエラーが起こったか、どの部分で起こりますか? –

+0

私にはエラーの兆候がないことがわかります –

答えて

0

私はついにそれを考え出しました。私は正しい言語を使用し、他の人がこのため、同じ言語で動作していないもののIsNullOrEmpty

ViewBag.ManSortParm = String.IsNullOrEmpty(sortOrder) ? "man_desc" : ""; 

を探していますので、デフォルトで動作します。私は必要なことだった -

ViewBag.ModelSortParm = sortOrder == "model_asc" ? "model_desc" : "model_asc"; 
ViewBag.ModDescSortParm = sortOrder == "ModDesc_asc" ? "ModDesc_desc" : "ModDesc_asc";