4
私の小さなasp.net mvcアプリケーションでカスタムソートを実装しようとしています。まあ、利用可能な多くのplginsがあります。しかし、今回は自分でやりたいと思っています。ここでASP.NET MVC:カスタムソート
マイ表ヘッダーです:
<tr>
<th>
S.No.
</th>
<th>
@Html.ActionLink("UrlTitle", "Index", new { SortOrder = ViewBag.SortOrder == null ? "Asc" : (ViewBag.SortOrder == "Asc"? "Desc":"Asc"), SortBy = "UrlTitle" })
</th>
<th>
@Html.DisplayNameFor(model => model.Url)
</th>
<th>
@Html.DisplayNameFor(model => model.UrlDesc)
</th>
<th>
@Html.DisplayNameFor(model => model.tbl_Category.CategoryName)
</th>
</tr>
そして、これはアクションです:
public ActionResult Index(String SortOrder, String SortBy)
{
ViewBag.SortOrder = SortOrder;
ViewBag.SortBy = SortBy;
var model = ObjBs.GetAll().Where(x=>x.IsApproved == "A");
switch(SortOrder)
{
case "Asc":
model = model.OrderBy(x => x.UrlTitle);
break;
case "Desc":
model = model.OrderByDescending(x => x.UrlTitle);
break;
}
return View(model);
}
現在、私はUrlTitleで並べ替えることができ、それには問題ありません。私はこのような何かを行うことはできません、代わりに、ネストされたスイッチを書き込むのでは、パラメータを使用して列名を渡すことができますので
switch(SortBy)
{
case "UrlTitle":
switch(SortOrder)
{
case "Asc":
model = model.OrderBy(x => x.UrlTitle);
break;
case "Desc":
model = model.OrderByDescending(x => x.UrlTitle);
break;
default:
break;
}
break;
case "Category":
switch (SortOrder)
{
case "Asc":
model = model.OrderBy(x => x.UrlTitle);
break;
case "Desc":
model = model.OrderByDescending(x => x.UrlTitle);
break;
default:
break;
}
break;
case "URL":
switch (SortOrder)
{
case "Asc":
model = model.OrderBy(x => x.UrlTitle);
break;
case "Desc":
model = model.OrderByDescending(x => x.UrlTitle);
break;
default:
break;
}
break;
default:
break;
}
::私はあまりにも他の列でソートしたい場合はしかし、私はこのような何かを書いた
model = model.OrderBy(x => x.SortBy); Or, model = model.OrderBy(SortBy);
私は、プログラムが実行されると、SortByの値がcolumnNameになると思っていました。しかし、それは動作していないようです。
私はちょうど同じようなコードを繰り返し書きたくありません。それを最小限に抑えたり、それをより良くするにはどうすればいいですか?