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

时间:2016-02-22 13:38:26

标签: c# asp.net-mvc datatables partial-views

我目前正在开发内联可编辑的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>

我在局部视图中设置会话变量会话[&#34; mon&#34;]值,但此值不受影响

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

3 个答案:

答案 0 :(得分:1)

设置会话变量在下一个请求之前不会生效。因此,您无法在局部视图中设置会话变量,然后在主视图中访问该变量。但是,您不应该在任何视图中设置会话中的任何内容,因为视图应该没有逻辑。显然,这是一个目标,而不是一个真正的限制,因为视图将不可避免地具有某些逻辑,但只有当它真正有必要时。在这里,它不是。访问会话的地方在控制器中。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

主要观点:

    <div class="customSearch" style="border:0px solid;margin:-15px;width:30%;height:auto;">
    <script>
      (function() {
        .....
      })();
    </script>
    <gcse:search enableAutoComplete="true"></gcse:search>
    </div>

PartialView:

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

为什么在必须使用javascript变量时在客户端使用会话?