当我在部分视图中创建和更新会话变量时,会话变量不会影响视图

本文关键字:变量 会话 视图 影响 更新 创建 | 更新日期: 2023-09-27 18:35:44

我目前正在开发内联可编辑的jquery数据表,因为我调用部分视图从服务器端调用数据。 数据正在成功获取。

问题:在部分视图中,我正在设置会话变量值,但鉴于会话变量值未更新。 这是我的代码结构。

查看代码

function getFixedHours() {
        $(document).ready(function () {
            var result = $('#demo');
            var date11 = $("#datepicker").datepicker({ dateFormat: 'yy-mm-dd' }).val();
            $.ajax({
                url: '@Url.Action("Home", "partialindex")',
                tyoe: 'GET',
                data: { date: date11, type: 1 },
                success: function (data) {
                    $('#demo').html(data);
                    $('#myDataTable').dataTable({
                        "bPaginate": false,
                        "aoColumnDefs": [
                             { 'bFilter': false, 'aTargets': [0, 1, 2, 3, 4, 5, 6, 7, 8] },
                             { 'bSortable': false, 'aTargets': [0, 1, 2, 3, 4, 5, 6, 7, 8] },
                             { "bSearchable": false, "aTargets": [0, 1, 2, 3, 4, 5, 6, 7, 8] }
                        ]
                    }).makeEditable({
                        sUpdateURL: "/Home/UpdateData/",
                        "aoColumns": [
                                        null,
                                          @{
                                              if (Session["mon"]!=null)
                                                  {
                                                      <text>
                                                    {  indicator: 'Saving...',
                                                        tooltip: 'Click to select town',
                                                        loadtext: 'loading...',
                                                        type: 'time',
                                                        submit: 'Save Changes'
                                                    }
                                                      </text>
                                                  }
                                              else {
                                                  <text> null  </text>
                                                   }
                                          }  
                                    ]
                    });
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    alert('Failed to retrieve data.');
                }
            });
        })
    }

部分视图

<table id="myDataTable" class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayName("Site")
            </th>

            <th>
                @if (!dayLocked)
                {
                    HttpContext.Current.Session["mon"] = "true";
                }
                else
                {
                    <text>Locked</text>
                    Session.Remove("mon");
                }
                @Html.DisplayName(mon.ToString("ddd"))
                @Html.DisplayName(mon.ToString("dd-MMM"))
            </th>
        </tr>
    </thead>
</table>

我在部分视图中设置了会话变量 session["mon"] 值,但此值在视图中不受影响

注意:这是一段代码,我是MVC的新手。

当我在部分视图中创建和更新会话变量时,会话变量不会影响视图

设置 a 会话变量直到下一个请求才会生效。因此,您无法在分部视图中设置会话变量,然后在主视图中访问该变量。但是,实际上,您不应该在任何视图中设置会话中的任何内容,因为视图应该没有逻辑。显然,这是一个目标,而不是一个真正的限制,因为观点不可避免地会有一些逻辑,但只有在真正必要的时候。在这里,它不是。访问会话的位置位于控制器中。

发生的情况是,当您请求视图时,视图中的代码被执行并返回 html。html 是根据会话变量生成的,就像它在此调用时一样。在浏览器中呈现视图后,它通过 ajax 调用 patrial。因此,在此流中,如果更改了会话变量,则它无法修改主视图的 HTML,因为代码部分不会在此流中执行。如果再次请求主视图,则这次更新的会话值将可用。因此,将根据更新的会话变量生成 HTML。

主视图 :

var isDayLocked =false;
function getFixedHours() {
if(isDayLocked){
    //do your stuff
}
}

部分视图:

<script>
isDayLocked = '@!Model.DayLocked'=='False';
</script>

当必须使用 JavaScript 变量时,为什么要在客户端使用会话?