簡體   English   中英

如何在不調用控制器的情況下刷新MVC webgrid

[英]How to refresh a MVC webgrid without calling the controller

在頁面加載時,我的模型將從一台機器的事件日志列表中傳入。 我聲明一個列表然后用這些日志填充它。

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列表中的Secutity類型日志填充網格時出現問題。

當我第一次打開頁面時,默認的“應用程序日志”通過此函數填充,我將“application”作為類型字符串傳遞:

@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>

所以,我的問題歸結為,我知道如何清除並制作新的日志和所有內容列表,但我不知道如何將其應用於網格。 理想情況下,我可以清除日志列表,使用安全日志填充它,然后刷新網格,現在將填充安全日志。 洗滌重復沖洗。

但是,似乎沒有任何內置方法以這種方式處理數據。 我能找到的所有例子都要我回到控制器,獲取更多數據並通過局部視圖重新填充網格。 但是,我已經擁有了所有數據,而且我更願意不必進行額外的查詢和加載,只是為了獲取我已有的數據。

為每種類型制作單獨的網格。點擊該類型的按鈕,在網格上填充適當的類型數據。 並且保持一些類型的軌道被加載。如果單擊其他類型按鈕,則隱藏前一個網格並在另一個網格中加載新類型數據。這減少了數據負載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM