c# - 使用视图模型上的属性进行 MVC 排序
问题描述
假设我有一个用于呈现表格的列表视图的视图模型。
查看型号:
public class SortModel
{
public List<Document> Documents {get;set;}
public string SortParameter {get;set;}
public string SortOrder {get;set;}
}
public class Document
{
public string Name {get;set;}
public int Age {get;set;}
}
看法:
<th>@Html.DisplayNameFor(model => model.Documents[0].Name)</th>
<th>@Html.DisplayNameFor(model => model.Documents[0].Age)</th>
控制器:
public ActionResult Index(SortModel model)
{
var docs = db.GetDocs();
if(model.SortParameter == "Age" && model.SortOrder == "desc")
{
docs.OrderByDescending(x => x.Age);
}
return View(model);
}
如何渲染视图以便表格标题可点击并在发布前更新模型?我想避免使用 ViewBag。
我猜我需要使用 ActionLink,但我不确定如何在发布之前更新模型。
就像是:
<th>@Html.ActionLink("Index", "Home", "Name", new { Model.SortParameter = "Name", Model.SortOrder = "Desc"})
解决方案
将表格标题更改为
<th>@Html.ActionLink("Name", "Index", "Home", new { SortParameter = "Name", SortOrder = Model.SortOrder }, null)</th>
<th>@Html.ActionLink("Name", "Index", "Home", new { SortParameter = "Age", SortOrder = Model.SortOrder }, null)</th>
然后修改控制器方法以切换SortOrder
public ActionResult Index(SortModel model)
{
var docs = db.GetDocs();
if(model.SortParameter == "Age" && model.SortOrder == "desc")
{
docs.OrderByDescending(x => x.Age);
model.SortOrder == "acs"
}
return View(model);
}
请注意,如果你有一个bool IsAscending
属性而不是你的string SortOrder
.
但是,您只有一个 'SortOrder' 属性,因此如果当前视图显示的是按Name
升序排序的文档,并且用户单击Age
,那么文档将按Age
升序排序。如果用户然后单击Name
,文档将按Name
降序排序。您尚未说明所需行为的原因,但您可以添加多个“SortOrder”属性,例如
public bool IsNameAscending { get; set; }
public bool IsAgeAscending { get; set; }
处理它,并允许您.ThenBy()
在查询中使用 a ,例如
docs.OrderBy(x => x.Age).ThenBy(x=> x.Name);
您可能还希望呈现一个视觉指示器(例如向上或向下箭头)以向用户指示当前的排序顺序。
推荐阅读
- python - 如何在迷宫中标记解决方案路径:在递归条件中处理“IF”条件“== True”
- rfc - 骨头是什么意思?
- javascript - 无法理解为什么多个同行无法在我的 webrtc 应用程序中工作
- azure - 按需调度 Azure 容器实例
- php - 使用作曲家自动加载的正确路径有问题吗?
- android - Android Studio 初学者问题:为什么我不能从 Button 属性窗口中选择正确的 onClick 函数?
- javascript - 如何在函数调用模式中使用“this”关键字?
- android - 哪个布局与片段一起使用?
- javascript - 根据复制到剪贴板的用户输入生成链接
- php - 我想获取表 A 上所有引用表 B 的名称