(C#)无法使用ASP.NET MVC中的会话变量传输订单状态

(C#)无法使用ASP.NET MVC中的会话变量传输订单状态,c#,asp.net,ajax,asp.net-mvc,sorting,C#,Asp.net,Ajax,Asp.net Mvc,Sorting,我有一张分类表。通过单击顶部的“Name”AJAX锚点,可以对表进行升序/降序排序。问题是我无法将当前asc/desc状态从视图传输到控制器。其思想是,每当用户单击该锚点时,排序类型就会改变。这是我的密码: 控制器: public ActionResult Show(string sortBy) { CategoryDao categoryDao = new CategoryDao(); var categories = categoryDao.Read().Cast<Ca

我有一张分类表。通过单击顶部的“Name”AJAX锚点,可以对表进行升序/降序排序。问题是我无法将当前asc/desc状态从视图传输到控制器。其思想是,每当用户单击该锚点时,排序类型就会改变。这是我的密码:

控制器

public ActionResult Show(string sortBy)
{
    CategoryDao categoryDao = new CategoryDao();
    var categories = categoryDao.Read().Cast<Category>().ToList();

    if (!Request.IsAjaxRequest())
    {
        Session["SortType"] = "nameAsc";

        return this.View(categories);
    }
    else
    {
        switch (sortBy)
        {
            case "nameAsc":
                categories = categories.OrderBy(c => c.Name).ToList();
                Session["SortType"] = "nameDesc";
                break;
            case "nameDesc":
                categories = categories.OrderByDescending(c => c.Name).ToList();
                Session["SortType"] = "nameAsc";
                break;
            case "productCountAsc":
                // TODO
                break;
            case "productCountDesc":
                // TODO
                break;
        }

        return PartialView("_TableBody", categories);
    }
}

我试着调试它,会话变量在单击时保持其“nameAsc”值。。就我而言,逻辑是正确的。因此,如果您能指出代码中的错误内容并进行适当的修复,我将不胜感激

实现一个隐藏元素以保存您的排序依据,并在他们单击列标题时通过JavaScript进行更新…

实现一个隐藏元素以保存您的排序依据,并在他们单击列标题时通过JavaScript进行更新…

在哪里更改
排序依据
值?当您在调试器中单步执行此操作时,将值设置为您期望的值在哪里?当单击ActionLink时,您应该获得会话变量的值@DavidMaybe我不太熟悉
ActionLink
的详细工作原理,但是链接本身是从服务器端代码重新呈现的吗?我想不会的。当然,您可以通过调试来确认这一点。但我怀疑你在页面加载时只在链接上设置了一次该值,然后就再也不更改它了。@David:链接可能没有刷新。我假设此链接位于表的标题中,从代码的外观来看,此链接仅更新了表体,通过单击,标题中的链接完全保持不变。不,它没有。。或者更确切地说,它应该将其更改为“nameDesc”,但当它返回到视图时,它将“nameAsc”作为参数从ActionLink传回。@chris您在哪里更改
排序值?当您在调试器中单步执行此操作时,将值设置为您期望的值在哪里?当单击ActionLink时,您应该获得会话变量的值@DavidMaybe我不太熟悉
ActionLink
的详细工作原理,但是链接本身是从服务器端代码重新呈现的吗?我想不会的。当然,您可以通过调试来确认这一点。但我怀疑你在页面加载时只在链接上设置了一次该值,然后就再也不更改它了。@David:链接可能没有刷新。我假设此链接位于表的标题中,从代码的外观来看,此链接仅更新了表体,通过单击,标题中的链接完全保持不变。不,它没有。。或者更确切地说,它应该将其更改为“nameDesc”,但当它返回到视图时,它会将“nameAsc”作为参数从ActionLink传回。@Chris
@Ajax.ActionLink("Name", "Show", "Category", new { sortBy = Session["SortType"].ToString() },
         new AjaxOptions
         {
             HttpMethod = "GET",
             UpdateTargetId = "table-body",
             InsertionMode = InsertionMode.Replace
         })