(C#)无法使用ASP.NET MVC中的会话变量传输订单状态
我有一张分类表。通过单击顶部的“Name”AJAX锚点,可以对表进行升序/降序排序。问题是我无法将当前asc/desc状态从视图传输到控制器。其思想是,每当用户单击该锚点时,排序类型就会改变。这是我的密码: 控制器:(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
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
})