2013-05-13 44 views
0

我的服務層向控制器發回一個帶有警告/成功/信息/錯誤消息的DTO,該控制器從基本控制器繼承,在此處我以消息方式處理消息。MVC - 自動處理用戶通知

我不知道我的執行是否是完全的廢話,我真的想要一些建議!

DTO

Public Class ExecutionResult 
    Public Enum AlertType 
     Warning 
     Success 
     Info 
     [Error] 
    End Enum 

    Public Property Type() As AlertType 
    Public Property Message() As String 
End Class 

基地控制器: (與我可以從每一個控制器訪問屬性executionResult)

Public Class BaseController 
    Inherits System.Web.Mvc.Controller 

    Protected Overloads Overrides Sub OnActionExecuted(ByVal ctx As ActionExecutedContext) 
     Alert() 
    End Sub 

    Public Property executionResult As New ExecutionResult 

    Public Sub Alert() 
     If Not String.IsNullOrWhiteSpace(Me.executionResult.Message) Then 
      TempData.Add(Me.executionResult.Type, Me.executionResult.Message) 
     End If 
    End Sub 
End Class 

控制器:

... 
Inherits BaseController 
... 

Function SomeFunction() As ActionResult 
    executionResult = _service.SomeFunctionInTheServiceLayer(viewModel) 
End Function 

然後我從主頁

@For Each item As KeyValuePair(Of String, Object) In TempData 
    If (TempData.ContainsKey(item.Key)) Then 
     @<div class="alert [email protected]"> 
      @item.Value 
     </div>   
    End If 
Next 
+0

如果它適用於你和你對解決方案感到滿意,沒關係,不是嗎? – Kenneth 2013-05-13 08:58:25

+0

只想知道這種情況是否存在「最佳實踐」,因爲我認爲每個人都必須在MVC網絡應用程序中以某種方式通知用戶。 – stare 2013-05-13 09:02:39

回答

0

顯示在一個局部視圖中的消息。在第一,因爲它依賴於SessionState的具有用於所有控制器合作,以啓用我不會用TempData的哪個由於可能的性能下降,因此不是最佳實踐。

無論如何,您不必在Session/TempData中存儲消息,因爲您的視圖是作爲您的操作的結果呈現的。不需要在請求之間存儲消息。所以ViewBag應該足夠了。

我想你必須打電話給你的Alert函數的地方? 我會定義存儲在ViewBag消息的basecontroller功能(對不起,它在C#):

public void SetAlert(ExecutionResult result) { 
    ViewBag.Alert = result; 
} 

在你看來,你可以簡單地訪問ViewBag:

@if (ViewBag.Alert != null) { 
    <div class="alert [email protected](ViewBag.Alert.Type)"> 
     @ViewBag.Alert.Message 
    </div>   
} 
+0

感謝您的回覆!用RedirectToAction調用不會不可能使用ViewBag?我不需要調用'Alert'函數,因爲我攔截了OnActionExecuted,它依賴於在基礎控制器中聲明的公共屬性。 – stare 2013-05-13 09:20:53

+0

是的,這是正確的。如果要在請求之間保留警報,則必須使用某種存儲。 – Jan 2013-05-13 09:34:04