基于会话变量的MVC3模态对话框

时间:2012-08-08 13:27:35

标签: jquery asp.net-mvc-3 jquery-ui

我正在开发一个MVC应用程序,其中数据是特定年份的。因此,我需要确保在查询任何数据之前设置工作年份。我之前问了这个问题并收到了回复here。这可以很好地将用户重定向到另一个页面。但是,这是有问题的,因为会话到期(我不希望它是一个没有过期的会话)。因此,如果会话暂停并且用户处于操作过程中,我不希望重置页面,因为重定向到另一个页面以选择年份。

经过长时间的介绍(道歉,我想说明我需要什么),我问,如果会话为空,是否可以创建一个模态对话框?

例如:

if (Session["Year"] != null)
{
    ...
}
else
{
    modal dialog to set year and go on our merry way...
}

我查看了jquery UI的示例,但它似乎并没有解决我的特殊难题。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

是的,这是对话框的jQuery UI组件。您必须将它放在视图中,因此您必须将您拥有的任何会话值传递给视图,以便您可以在那里进行逻辑测试。

http://jqueryui.com/demos/dialog/

更新:

您可以创建一个包含对话框的视图。接下来,您将覆盖OnActionExecuted Controller操作,该操作将在每个请求上执行。在此操作中,您将进行会话检查。

然后,您将使用ViewBag将值传递到主/布局视图。在该视图中,只需对ViewBag值进行逻辑检查,并相应地显示该对话框。

if (Session["Year"] != null)
{
    ...
}
else
{
@Html.Raw(@"
<script type='text/javascript'>
   $(document).ready(function(){ 
      $('#dialogID').dialog('open'); //I am not sure if this is proper way to open it
   });
</script>")
}

答案 1 :(得分:1)

你可以在javascript中使用服务器端分配到javascript变量的混合来执行此操作。例如。

<script>
    $(function(){ 
        var showDiag = @(ViewData["Year"] ?? false);
        if(showDiag){
            //code to show
        }
    });
</script>