簡體   English   中英

使用MVC會話存儲兩次訪問之間的客戶端值(例如過濾器文本)

[英]Use MVC Session to store Client-side values (e.g. filter text) between visits

在MVC視圖中,是否有一種有效的方法來存儲客戶端值以供后續頁面訪問使用?

典型場景

索引頁的表有點長,所以我添加了一個過濾器(我知道分頁是另一個選擇),並使用帶有一些JavaScript的輸入控件來限制表行,而不必從服務器執行另一個“獲取”。

效果很好,但是,如果我導航(例如)進入編輯頁面,然后返回到“索引”頁面,則過濾器顯然不再存在。

經過一番搜索之后,我再也沒有發現任何簡單的東西,因此我在下面發布了我的微薄答案。

視圖在頁面頂部包含一個表單,用戶可以在其中輸入過濾器文本(在“獲取”表單上,文本是通過會話值設置的):

<form id="frmEdit">
    @Html.AntiForgeryToken()

    <div class="form-group row">
        <div class="col-sm-6">
                @Html.ActionLink("Create New", "Create", null, new { @class = "nav-item nav-link" })
        </div>
        <label for="search" class="col-sm-2 col-form-label text-right">Filter</label>
        <div class="col-sm-4">
            <input type="text" placeholder="Filter" class="form-control" id="search" value=@Session["SparesSectionFilter"]>
        </div>
    </div>
</form>

腳本部分包含過濾的JavaScript以及回發到控制器的信息

@section Scripts{
    <script type="text/javascript">
        // on load
        PerformFilter();

        // hook up events
        $(function () {
            $("input#search").on("keydown keyup", function () {
                PerformFilter();

                // post back to session for reuse
                $.post('SparesSections/Session_Add', { __RequestVerificationToken: $('[name=__RequestVerificationToken]').val(), itemName: 'SparesSectionFilter', itemValue: $("#search").val() });
            });
        })
   </script>
}

我為控制器自定義了一個基類,並在其中添加了以下操作。 這些可從使用此類的任何控制器使用。 Razor視圖加載了會話值,但是我在控制器中為客戶端選項添加了“ Get”。

 [HttpPost]
 [ValidateAntiForgeryToken]
    public ActionResult Session_Add(string itemName, string itemValue)
    {
        Session.Add(itemName, itemValue);

        return Json(new { itemName = itemName, itemValue = itemValue }, JsonRequestBehavior.AllowGet);
    }

    [HttpGet]
    public ActionResult Session_Get(string itemName)
    {
        return Json(new { itemName = itemName, itemValue = Session[itemName] ?? string.Empty }, JsonRequestBehavior.AllowGet);
    }

暫無
暫無

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

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