如何在不调用控制器的情况下刷新MVC webgrid

时间:2015-08-05 14:07:27

标签: c# jquery asp.net-mvc model-view-controller webgrid

在页面加载时,我的模型将从一台机器的事件日志列表中传入。我声明了一个列表,然后用这些日志填充它。

private List<machine_log> _logObjList = new List<machine_log>();

通过以下方式填写:

@helper FillLogMainList()
{
    foreach (IQueryable<machine_log> logType in Model.MachineLogs)
    {
        foreach (var log in logType)
        {
            _logObjList.Add(log);
        }
    }
}

这些日志可以有6种不同的类型。应用程序,系统,安全性等我想在webgrid中显示一种类型。我现在能做什么。当我已经加载说“#34;应用程序日志&#34;但我想点击&#34;安全日志&#34;按钮现在用我已经拥有的_logObjList列表中的Secutity类型日志填充网格。

当我第一次打开页面时,默认的&#34;应用程序日志&#34;通过这个功能填补我通过&#34; application&#34;作为类型字符串:

@helper FillLogList(string type)
{
    _logs.Clear();
    foreach (var log in _logObjList)
    {
        if (log.log_type == type)
        {
            string entry = "";
            if (log.entry_type == "Warning ")
            {
                entry = "http://trycatchgaming.com/temp/warning.png";
            }
            else
            {
                entry = "http://trycatchgaming.com/temp/error.png";
            }
            var newLine = new SingleLog
            {
                EntryType = entry,
                Message = log.event_id + "#" + log.message,
                Source = log.source,
                EventId = log.event_id,
                LogId = log.id,
                EntryTime = log.entry_time
            };
            _logs.Add(newLine);
        }
    }
}

现在我有一个_logs列表,我填充了webgrid,这是普通&#34; body&#34;的一部分。 div中的页面:

<div id="grid" style="padding: 0; overflow-y: scroll; height: 500px; width: 100%">
                @obj = new WebGrid(source: _logs, defaultSort: "EntryTime", ajaxUpdateContainerId: "grid", rowsPerPage: 200000);

                @obj.GetHtml(
                    tableStyle: "webgrid-table",
                    htmlAttributes: new { id = "MainTable" },
                    headerStyle: "webgrid-header",
                    //footerStyle: "webgrid-footer",
                    alternatingRowStyle: "webgrid-alternating-row",
                    selectedRowStyle: "webgrid-selected-row",
                    rowStyle: "webgrid-row-style",
                    //mode: WebGridPagerModes.All,
                    columns: obj.Columns(
                        obj.Column(columnName: "EntryType", header: "Event Type", format:@<img src="@item.EntryType" />),
                        obj.Column(columnName: "EntryTime", header: "Event Time"),
                        obj.Column(columnName: "Source", header: "Source"),
                        obj.Column(columnName: "EventId", header: "Event Id"),
                        obj.Column(columnName: "LogId", header: "Log Id"),
                        obj.Column(header: "All", style: "labelcolumn", format: @<text><input class="check-box" tag="check-box" id="assignChkBx" name="Message" type="checkbox" value="@item.Message" /></text>)
                        )
                    )
            </div>

所以,我的问题归结为,我知道如何清除并制作新的日志和所有内容列表,但我不知道如何将其应用于网格。理想情况下,我可以清除日志列表,使用安全日志填充它,然后刷新网格,现在将填充安全日志。洗涤重复冲洗。

然而,似乎没有任何内置方法以这种方式处理数据。我能找到的所有例子都要我回到控制器,获取更多数据并通过局部视图重新填充网格。但是,我已经掌握了所有数据,我宁愿不必另外查询和加载只是为了获取我已有的数据。

1 个答案:

答案 0 :(得分:0)

为每种类型制作单独的网格。点击该类型的按钮,在网格上填充适当的类型数据。如果点击了其他类型按钮,则隐藏前一个网格并在另一个网格中加载新类型数据。这样可以减少数据负荷。