[英]MVC sorting with property on View Model
说我有一个呈现表的列表视图的视图模型。
查看模型:
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()
,例如
docs.OrderBy(x => x.Age).ThenBy(x=> x.Name);
您可能还需要呈现一个可视指示器(例如,向上或向下箭头)以向用户指示当前的排序顺序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.