微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从布局访问会话数据

如何解决从布局访问会话数据

在我的 ASP.NET MVC 解决方案中,我有许多服务。

其中之一,SessionService,用于访问当前选择的区域和时间跨度。

我想在用于装饰视图的布局中显示它们。访问存储在 SessionService 中的那些值的最佳设计方法是什么?

现在我正在考虑使用从布局调用 ChildAction 反过来调用会话服务:

<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap-combined.min.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" media="screen" href="http://tarruda.github.com/bootstrap-datetimepicker/assets/css/bootstrap-datetimepicker.min.css">
<div id="datetimepicker" class="input-append date">
  <input type="text"></input>
  <span class="add-on">
                <i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
              </span>
</div>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
<script type="text/javascript" src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/js/bootstrap.min.js">
</script>
<script type="text/javascript" src="http://tarruda.github.com/bootstrap-datetimepicker/assets/js/bootstrap-datetimepicker.min.js">
</script>
<script type="text/javascript" src="http://tarruda.github.com/bootstrap-datetimepicker/assets/js/bootstrap-datetimepicker.pt-BR.js">
</script>

这是一个方法还是你能推荐更好的方法

更新1: 其他可能传递值的选项:

  • 通过 ViewBag
  • 通过视图模型

然而,这些选项的缺点是有必要在每个操作方法中填充它们,这将导致代码重复(可以通过过滤器来缓解,但这同样需要装饰带过滤器的控制器)。

更新 2(在下面与 O:rvar 的讨论中诞生):

另一种选择是创建一个基本控制器,它将在创建时填充 ViewBag 属性。所有其他控制器都应该从它派生。

解决方法

您应该能够使用以下代码在视图中访问会话数据:

var region = @Session["Region"].ToString();

或者你可以像你提到的那样通过ajax调用调用控制器方法并以这种方式获取会话数据。使用 childaction 方法也是完成您想要的事情的好方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。