加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC:自定义排序

发布时间:2020-12-16 09:20:18 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试在我的小型asp.net mvc应用程序中实现自定义排序.那里有很多可用的plgins.但这次我想自己做. 这是我的表头: tr th S.No. /th th @Html.ActionLink("UrlTitle","Index",new { SortOrder = ViewBag.SortOrder == null ? "Asc" : (ViewBag.SortOrder
我正在尝试在我的小型asp.net mvc应用程序中实现自定义排序.那里有很多可用的plgins.但这次我想自己做.

这是我的表头:

<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.但它似乎不起作用.

我只是不想反复写相似的代码.如何最小化它或使其更好?

解决方法

如果您不想使用反射路径,则应该能够使用 dynamic Linq进行查询.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读