2017-08-01 108 views
0

我將從WrapBootstrap https://wrapbootstrap.com/theme/inspinia-responsive-admin-theme-WB0R5L90S購買個人項目的MVC主題。MVC應用程序加載通知

我很喜歡這個設計,但它提出了一個關於在頭文件中加載通知的最佳方法的問題(真正需要加載到公共佈局視圖的任何類型的動態數據)。

我知道有很多方法可以做到這一點,但我處於我的發展經歷中,我試圖打破我不良的設計習慣(一起黑客攻擊,所以他們「只是工作」),以及我可以尋找優雅的解決方案。

,使迄今爲止最有意義的事情是要麼:

1)建立一個全球性的ActionFilter將在_layout過濾所有請求,並拋出「LayoutViewModel」到ViewBag,只是使用ViewBag視圖。

  • 我寧願做強類型的東西,但我沒有看到辦法。
  • 這很好,因爲它是可用的,不需要我的控制器從基類中繼承任何功能,這可能是流氓,甚至不知道它正在發生。

2)加載頁面和onLoad,只是做一個Ajax調用服務器來加載我需要的任何動態數據。

  • 如果您的佈局需要根據數據更改,這可能會有一些缺點。加載後,我不喜歡在頁面上捕捉整個頁面。

是否有設計模式或MVC功能,我可能會失蹤頂尖完成此?

我可能在將來可能會實現一些使用SignalR(或簡單的定時ajax調用來查找更新)來獲取更新的數據/通知,但現在我只是看着初始頁面加載。

謝謝你的任何想法,你可能有。

回答

1

最有可能的是,你要找的是一個孩子的行爲。這幾乎就像普通的操作一樣,除了它們會返回部分視圖並且通常用[ChildActionOnly]來修飾以防止通過URL欄發送到它們。

[ChildActionOnly] 
public ActionResult Notifications() 
{ 
    var notifications = // get the notifications; 
    return PartialView("_Notifications", notifications); 
} 

然後,在你的佈局,你只需要添加下面,你希望它出現:

@Html.Action("Notifications", "Foo") 

哪裏"Foo"是你把這個孩子的動作控制器的名字,我有一個post on my blog,它給出了Razor模板系統的一個入門書,它也可能對您有用。

+0

這可能是_EXACTLY_我所需要的。我很驚訝我從來沒有遇到過這個問題,即使是在意外事故中。顯然我的google-fu沒有我想象的那麼強大。如果符合我的需求,我會研究它並標記爲答案。非常感謝! – TychonOmega

+1

使用兒童動作時的一對筆記。 1)由於他們不是真正的行爲,他們不能重定向,特別是像登錄一樣。如果您將它們與授權一起使用,則還應該使用AllowAnonymous,否則您將遇到問題。2)不幸的是,它們不能是異步的,所以你只需要在裏面使用同步方法。 –