1

我正在使用 MVC5 和帮助程序 Lib.Web.Mvc.JQuery.JqGrid。我需要在没有当前记录的情况下将列表加载到编辑单元格中,以获得一个相同类型的过滤列表。

我必须得到这个:

  • 第一类
  • 1.1 类(当前记录)
  • 第 2 类
  • 2.1 类
  • 2.2 类

该列表应显示除“类别 1.1”之外的所有类别。

在我的模型中,受影响的属性如下:

[ScaffoldColumn(false)]
[JqGridColumnEditable(false)]
public int? CategoryPK { get; set; } 

[DisplayNameLocalized("Category")]
[JqGridColumnSortable(true, Index = "CategoryPK")]
[JqGridColumnEditable(true, "List4DDL", "Categories", EditType = JqGridColumnEditTypes.Select)]
[JqGridColumnFormatter("$.ddlFormatter")]
public string Category { get; set; }

我对控制器“类别”的操作

 public ActionResult List4DDL() {           
        var list = new Dictionary<int, string>();
        try {
          ... my code to get list of categories
        } catch {
        ...
        }
        return (PartialView("_Partial.DropDownList", list));
   }

如何将编辑行 ID 或所选项目发送到操作以获取过滤列表?

4

1 回答 1

1

解决了!既然有人可能有同样的问题,我解释一下是怎么做到的。

我在我的模型中修改了属性“Category”的数据注释,所以:

[DisplayNameLocalized("Category")]
[JqGridColumnSortable(true, Index = "CategoryPK")]
[JqGridColumnEditable(true, "List4DDL", "Categories", EditType = JqGridColumnEditTypes.Select)]
[JqGridColumnFormatter("$.ddlFormatter", UnFormatter = "$.ddlUnFormatter")]
public string Category { get; set; }

添加属性“UnFormatter”,在我处理完视图后,在选择单元格时触发

在视图中,我添加了以下代码:

<script type="text/javascript">
    $(document).ready(function() {          
    @jqGrid.GetJavaScript(); 
    ... (other code fo my grid) ... 
    $.ddlUnFormatter =
        function(cellvalue, options, rowObject) {
            var recordID = -1;
            if (options) {
                if (options.rowId) {
                    recordID = options.rowId;
                }
                if (options.colModel) {
                    if (options.colModel.editoptions) {
                        if (options.colModel.editoptions.dataUrl && (options.colModel.editoptions.dataUrl.indexOf("?id=") < 1)) {
                            options.colModel.editoptions.dataUrl = options.colModel.editoptions.dataUrl + "?id=" + recordID;
                        }
                    }
                }
            }
            return (cellvalue);
        };
</script>

我在加载列表的路线上即时添加 id。这是我的控制器中的操作:

public ActionResult List4DDL(int? id) {           
    var list = new Dictionary<int, string>();
    try {
      ... (my code to get list of categories, filtered by id)
    } catch {
    ...
    }
    return (PartialView("_Partial.DropDownList", list));
}

我希望我对某人有帮助。

于 2016-02-25T09:21:52.970 回答