sortdir没有在MVC 3 WebGird中使用枚举数据类型

Ste*_* P. 5 sorting enums asp.net-mvc-3

我有以下结构:

模型

public class EventEntry : LogEntry
{
    public EventType Type { get; set; }

    public string Source { get; set; }
}

public enum EventType : int
{
    Information = 1,
    Warning = 2,
    Error = 3
} 
Run Code Online (Sandbox Code Playgroud)

视图

<div id="grid">
@{
    var grid = new WebGrid(canPage: true, rowsPerPage: Ctrl.PageSize, canSort: true, ajaxUpdateContainerId: "grid");
    grid.Bind(Model.Events, rowCount: Model.TotalRecords, autoSortAndPage: false);

    grid.Pager(WebGridPagerModes.All);
    @grid.GetHtml(htmlAttributes: new { id="grid" },
            columns: grid.Columns(
            grid.Column("Type"),
            grid.Column("Source"));    
}
</div>
Run Code Online (Sandbox Code Playgroud)

调节器

public ActionResult Index(int? page, string sort, string sortdir) {...}
Run Code Online (Sandbox Code Playgroud)

当我点击字符串类型的"源"列时,sordir将从"ASC"更改为"DESC",但是当我在"类型"列上尝试相同的操作时,sordir将始终返回"ASC".

Mik*_*ike 4

当前接受的答案并不是您问题的答案。

当您在绑定操作中未提及列名时,枚举似乎不会排序。我通过在将模型绑定到网络网格时提供所有必需的列名称来修复此问题。在此示例中,UserType 属性是一个枚举。

        var webgrid = new WebGrid(rowsPerPage: 25);

        webgrid.Bind(Model, new[] { "FirstName", "MiddleName", "SurName", "UserType" });

        var columns = webgrid.Columns(
            webgrid.Column("FirstName", "Voornaam"),
            webgrid.Column("MiddleName", "Tussenvoegsels"),
            webgrid.Column("SurName", "Achternaam"),
            webgrid.Column("UserType", "Type gebruiker"),                
        );
Run Code Online (Sandbox Code Playgroud)

因此,我认为如果您实现以下代码,排序将在不更改控制器的情况下进行:

<div id="grid">
@{
    var grid = new WebGrid(canPage: true, rowsPerPage: Ctrl.PageSize, canSort: true, ajaxUpdateContainerId: "grid");
    grid.Bind(Model.Events, new[] { "Type", "Source" }, rowCount: Model.TotalRecords, autoSortAndPage: false);

    grid.Pager(WebGridPagerModes.All);
    @grid.GetHtml(htmlAttributes: new { id="grid" },
            columns: grid.Columns(
            grid.Column("Type"),
            grid.Column("Source"));    
}
</div>
Run Code Online (Sandbox Code Playgroud)