0

我有一个返回真/假的函数......像这样......

Shared Function CartHasItems() As Boolean
    If HttpContext.Current.Session("ASPNETShoppingCart") Is Nothing Then
        Return False
    Else
        If CType(HttpContext.Current.Session("ASPNETShoppingCart"), ShoppingCart).Items.Count > 0 Then
            Return True
        Else
            Return False
        End If
        Return True
    End If
End Function

现在在几页上,我必须检查此函数是否返回真/假...如果为 FALSE,则显示一条消息并重定向到一个页面...如果为 TRUE,则没有任何反应。

我的问题是......我有这么多页面(视图),我必须调用这个函数来进行条件检查并进行处理......现在我正在像这样手动进行......

<% If ViewData("CartSession") Then %>
      We have Items
    <% Else %>
       No Items
    <% End If%>

我可以说,这不是正确的做法......有这么多视图,看起来我一遍又一遍地重复我的代码。

在我使用 BASE CLASS 的 webforms 中,我使用了基类的 page_load 事件来执行重复性任务,我如何在 MVC 中对选定的一组视图执行此操作?

谢谢

4

2 回答 2

1

编写一个扩展 HtmlHelper 的扩展方法。

有关如何执行此操作的更多信息:http: //develoq.net/2011/how-to-create-custom-html-helpers-for-asp-net-mvc-3-and-razor-view-engine/

更新

您还可以将该逻辑放在共享视图目录中的巴黎视图中。

或者,您可以为所有视图创建一个基类并将其放在那里:http ://haacked.com/archive/2011/02/21/changeing-base-type-of-a-razor-view.aspx

于 2013-05-26T05:58:14.233 回答
0

归功于“神秘人”让我朝着正确的方向前进。ActionFilterAttribute是答案......我创建了一个自定义动作过滤器......现在我可以将动作过滤器应用于任何动作方法甚至整个控制器。下面是代码示例。

Public Class CartCheckFilter
    Inherits ActionFilterAttribute


    Public Overrides Sub OnActionExecuting(filterContext As ActionExecutingContext)

        If HttpContext.Current.Session("ASPNETShoppingCart") Is Nothing Then

            Dim redirectTarget = New RouteValueDictionary() From { _
             {"action", "noCartData"}, _
             {"controller", "Checkout"} _
            }

            filterContext.Result = New RedirectToRouteResult(redirectTarget)

        Else

            If CType(HttpContext.Current.Session("ASPNETShoppingCart"), ShoppingCart).Items.Count <= 0 Then

                Dim redirectTarget = New RouteValueDictionary() From { _
                 {"action", "noCartData"}, _
                 {"controller", "checkout"} _
                }

                filterContext.Result = New RedirectToRouteResult(redirectTarget)
            End If


        End If



    End Sub

这就是我如何实现这个 ActionFilter:

<CartCheckFilter()>
Function Index() As ActionResult

    Return View()

End Function
于 2013-05-26T19:34:04.323 回答