【问题标题】:Adding Activate/Deactivate button in MVC jqGrid在 MVC jqGrid 中添加激活/停用按钮
【发布时间】:2013-10-15 01:58:00
【问题描述】:

我的项目中有 FormTemplate 类

public class FormTemplate : BaseEntity
{
    public virtual string Name { get; set; }
    public virtual DateTime? DateCreation { get; set; }
    public virtual FormTemplateGroup Group { get; set; }
    public virtual bool Active { get; set; }
    public virtual FormTemplateStatus Status { get; set; }
    public virtual IList<QuestionBlock> QuestionBlocks { get; set; }
    public virtual bool IsFreeze { get; set; }
}

我使用 MVC jqGrid http://mvcjqgrid.skaele.it/Home/Formatters
在页面上显示 FormTemplates 列表

@(Html.Grid("Grid")
            .SetCaption("List")
            .AddColumn(new Column("Name").SetLabel("Name"))
            .AddColumn(new Column("GroupFor").SetLabel("Group"))
            .AddColumn(new Column("DateCreation").SetLabel("Date"))
            .AddColumn(new Column("Status").SetLabel("Status")).SetSortOnHeaderClick(false)
            .AddColumn(new Column("Id").SetLabel("&nbsp;").SetCustomFormatter("buttonize").SetWidth(220).SetAlign(Align.Center))
            .SetAutoWidth(false)
            .SetRowNumbers(true)
            .SetUrl(Url.Action("FormTemplateGridData"))
            .SetAutoWidth(true)
            .SetRowNum(10)
            .SetRowList(new[] { 5, 10, 15, 20 })
            .SetViewRecords(true)
            .SetPager("Pager"))

我没有在我的页面上显示IsFreeze 属性的值,但如果IsFreeze == true 我需要添加激活按钮,否则为每个FormTemplate 添加停用按钮。

我尝试在buttonize中添加检查功能

function buttonize(cellvalue, options, rowobject) {
        var result = '<input type="button" value="Edit" onclick="editTemplate(' + options.rowId + ')">' + '&nbsp;'
            + '<input type="button" value="Delete" onclick="deleteTemplate(' + options.rowId + ')">' + '&nbsp;';

        if (isFreezeTemplate(rowobject[4])) {
            result += '<input type="button" value="Activate" onclick="activateTemplate(' + options.rowId + ')">';
        }
        else {
            result += '<input type="button" value="Deativate" onclick="deactivateTemplate(' + options.rowId + ')">';
        }
        return result;
    }

新增功能

function isFreezeTemplate(id) {
        var check = $.post('@Url.Action("IsFreezeFormTemplate")', { id: id });
        return check;
    }

并添加到控制器中

[HttpPost]
    public bool IsFreezeFormTemplate(int id)
    {
        var formTemplate =
            FormTemplateRepository.Query()
            .Where(ft => ft.Id == id)
            .SingleOrDefault();

        if (formTemplate.IsFreeze == true) return true;
        return false;
    }

但我只获得页面上所有 FormTemplates 的激活按钮。
如何解决?

【问题讨论】:

  • 你知道$.post 是一个异步对象,它返回一个jqXHR 对象,而不是你操作的返回值吗?你应该有一个你发送给你的代码的属性......
  • 你能解释一下我该怎么做吗?

标签: asp.net-mvc jqgrid-asp.net mvcjqgrid


【解决方案1】:

我建议您在FormTemplateGridData 操作中填写IsFreeze(如果未完成)并直接在您的buttonize 函数中使用它:

function buttonize(cellvalue, options, rowobject) {
    var result = '<input type="button" value="Edit" onclick="editTemplate(' + options.rowId + ')">' + '&nbsp;'
        + '<input type="button" value="Delete" onclick="deleteTemplate(' + options.rowId + ')">' + '&nbsp;';

    if (rowobject["IsFreeze"]) {
        result += '<input type="button" value="Activate" onclick="activateTemplate(' + options.rowId + ')">';
    }
    else {
        result += '<input type="button" value="Deactivate" onclick="deactivateTemplate(' + options.rowId + ')">';
    }

    return result;
}

编辑 - 操作代码

为了精确发送到网格,这里是网格数据操作的代码:

public JsonResult FormTemplateGridData()
{
    var donnees = new
    {
        total = 2,
        page = 1,
        records = 2,
        rows = new List<FormTemplate>
        {
            new FormTemplate { Id = 1, Active = true, Name = "first", IsFreeze = true },
            new FormTemplate { Id = 2, Active = true, Name = "second", IsFreeze = true  },
            new FormTemplate { Id = 3, Active = false, Name = "last", IsFreeze = false  }
        }
    };

    return Json(donnees);
}

【讨论】:

  • 我在网格中添加了.AddColumn(new Column("IsFreeze").SetHidden(true)),但在buttonuze-function if (rowobject["IsFreeze"]) 中不起作用。我在控制台中检查,rowobject 是数组,它包含,例如,rowobject: Array[6] 0: "Template1" 1: "Group 2" 2: "10.10.2010 0:00:00" 3: "New" 4: "False" 5: "1",但我不明白如何从这个数组中获取第四个值。我试过rowobject[4],还是不行。
  • if(rowobject[4] == "True"
  • @Robin van der Knaap 非常感谢,我已经找到了这种方式。
  • @Heidel 那么其中一种解决方案现在有效吗?但是对于 rowobject,它取决于您的 FormTemplateGridData 操作返回的 json 对象。就我而言,rowsFormTemplate 的列表,因此可以直接访问不同的字段并以 JSON 格式访问,因此如果类型是布尔值,我会得到一个 JS 布尔值(这就是为什么我的测试是 rowobject["IsFreeze"]...
【解决方案2】:

您可以在网格中添加一个隐藏列,通过 rowobject 参数从中读取 buttonize 函数中的值。

.AddColumn(new Column("IsFreeze").SetHidden(true))

这样就不需要ajax请求了。

【讨论】:

  • 非常感谢您的帮助!
  • 想想看,你可能甚至不需要这个专栏。如果 IsFreeze 字段包含在来自服务器的数据中,它可能也包含在 rowobject 参数中。
猜你喜欢
  • 1970-01-01
  • 2020-09-10
  • 2011-05-01
  • 2013-03-05
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多