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

本文关键字:情况下 刷新 MVC webgrid 控制器 调用 | 更新日期: 2023-09-27 18:06:25

在页面加载时,我的模型与来自机器的事件日志列表一起传递进来。我声明一个列表,然后用这些日志填充它。

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中展示一种类型。我现在就能做到。当我已经加载了"应用程序日志",但是我想单击"安全日志"按钮,现在用我已经拥有的_logObjList列表中的安全类型日志填充网格时,问题就出现了。

当我第一次打开页面时,默认的"应用程序日志"通过这个函数填充,我将"应用程序"作为类型字符串传入:

@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,这是正常的"正文"的一部分的页面内的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>

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

然而,似乎没有任何内置的方法来处理这种方式的数据。我能找到的所有例子都希望我回到控制器,获得更多的数据,并通过一些部分视图重新填充网格。然而,我已经拥有了所有的数据,我宁愿不做额外的查询和加载只是为了得到我已经拥有的数据。

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

为每一种字体制作单独的网格。然后点击该类型的按钮在网格上填充相应类型的数据。并跟踪类型是加载的。如果单击其他类型按钮,则隐藏先前的网格并在另一个网格中加载新类型数据。