使用jqGrid MVC单独的文本和值

时间:2014-06-20 13:57:59

标签: jquery asp.net-mvc jqgrid asp.net-mvc-5

我目前正在使用MVC来设置jqGrid。我试图为用户角色创建一个表。一列应该有用户,一列应该具有该角色。不太复杂。但是,目前,它们被格式化为字符串,并且查看长ID字符串并不是非常有用。所以我希望将Ids格式化为它们对应的用户名和角色名称,但我仍然希望底层值是UserId和RoleId,以便于编辑和更改。目前,我有这样的情况,当你去编辑它们时,会出现一个下拉框,它将UserId格式化为UserName,同时保留UserId的值,但我不知道如何让它在我和#39;我没有编辑...

这是下拉框的代码。

    private void SetUpUserNameColumn(JQGrid userRoleGrid)
    {
        // setup the grid search criteria for the columns
        JQGridColumn userIdColumn = userRoleGrid.Columns.Find(c => c.DataField == "UserId");
        userIdColumn.Editable = true;
        userIdColumn.EditType = EditType.DropDown;

        // Populate the search dropdown only on initial request, in order to optimize performance
        if (userRoleGrid.AjaxCallBackMode == AjaxCallBackMode.RequestData)
        {
            var db = new ApplicationDbContext();
            var editList = from user in db.Users
                           select new SelectListItem
                           {
                               Text = user.UserName,
                               Value = user.UserId
                           };

            userIdColumn.EditList = editList.ToList();
        }
    }

1 个答案:

答案 0 :(得分:0)

我们使用的解决方案是将CustomFormatter添加到该列。这是相关的代码。

  1. 在后面的代码中创建网格时,您需要添加如下所示的CustomFormatter。

    var jqGrid = new JQGrid 
    {
        Columns = 
        { 
            new JQGridColumn
            { 
                HeaderText = "Role"
              , DataField  = "RoleId"
              , Formatter  = new CustomFormatter { FormatterFunction = "RoleFormatter" }
            }
        }
    };
    
  2. 然后你需要在JS中编写RoleFormatter函数并将其添加到你的视图中。

    <script>
        function RoleFormatter(cellValue, options, rowObject) {
    
            if(cellValue == '1') return 'Admin'
            if(cellValue == '2') return 'Client'
            if(cellValue == '3') return 'Lucky'
    
            return cellValue;
        }
    </script>
    
  3. 就是这样。该列显示实际设置为RoleId时的Formatter返回值。