2011-11-22 66 views
1

在工作中,我一直负责为现有的MVC 3/Razor项目添加附加功能。我之前没有使用MVC,但对Web Forms非常熟悉。MVC 3 Razor - 基于EF查询显示模态

但是,我不太确定在哪里放置我需要的一切。

当应用程序第一次加载时,会出现登录页面。当用户成功登录时,用户将看到一个仪表板类型页面。

新功能是检测用户是否具有Due Date < Now的FollowUpItems。如果Count > 0然后显示一个Modal弹出式窗口,其中包含一些文本和一个链接到'View Followup Items'的链接。

已经有一个控制器和操作用于查看后续项目。我需要显示模态,并且我想使模态成为可重用类型的对象 - 我假设/想出一个PartialView,我可以在其中传递Controller,Action,Params的名称以显示可能的ActionLink,我将显示在模式弹出框中,以及消息文本等。

我需要一点关于如何打开模式的指导,因为它没有附加到点击,而是表达式是否评估为真或假,以及在哪里最好的地方是件。

预先感谢指导

+1

你有这个项目的jQuery? –

+0

是的,我喜欢。我可以添加任何我想添加的内容。 – TheGeekYouNeed

回答

1

如果用户在加载仪表盘页面的动作已经FollowUpItems我将检测,并存储在ViewBag信息。例如,

public ActionResult Dashboard() 
{ 
    ViewBag.HasFollowupItems = UserHasFollowupItems(); 
    return View(); 
} 

在这个例子中,UserHasFollowupItems()返回一个字符串,类似“真”假”。

在仪表板视图中,添加一个空div到其中的模态数据将被加载

<div id="followup_items"></div> 

然后在限定的模态,并确定相同的视图中添加的document.ready()如果​​模态应加载:

$(document).ready(function() 
{ 
    // define modal 
    $("#followup_items").dialog({ 
     autoOpen: false, 
     height: 'auto', 
     width: 825, 
     title: 'Followup Items', 
     position: [75, 75], 
     modal: true, 
     draggable: true, 
     closeOnEscape: true, 
     buttons: { 
      'Close': function() 
      { 
       $(this).dialog('close'); 
      } 
     }, 
     close: function() 
     {    
      $('.ui-widget-content').removeClass('ui-state-error'); 
     },   
    }); 

    if(@ViewBag.HasFollowupItems == 'true') 
    { 
     $('#followup_items').load("/FollowupItems/Load", function (data, txtStatus, XMLHttpRequest) 
     { 
      $('#followup_items').dialog('open'); 
     } 
    }); 
}); 

在这个例子中/FollowupItems/Load是URL到适当的控制器/动作,对于该视图生成的数据。你是对的,这个视图是一个局部视图,加载到页面上的空的followup_items div中。

因此,您可以在视图中的任何位置使用@ViewBag对象,在这种情况下传递布尔值,指示是否应该加载/打开模式。我还没有找到在外部JavaScript文件中使用ViewBag的方法,所以我通常在我的视图中使用嵌入式脚本标记,因此我可以使用ViewBag。

您也可以以相同的方式(/FollowupItems/Load/@ViewBag.Userid)或后续操作需要的任何其他数据添加用户标识。

+0

非常感谢您的跟踪。当我回家时我会看这个。在我看来很好。 :) – TheGeekYouNeed