我有其中有一個功能叫GetSiteMap()
母版頁,此功能用於定製呈現基於當前位置的地圖。我的問題是,在MVC中,你沒有模型背後的代碼,因此沒有公開這種功能。ASP.NET MVC函數調用
什麼是做正確的方法是什麼?我應該有一個與其中定義的功能的主控頁面控制器?
Public Function GetSitemap() As String
Dim s As New SiteNavigation
Dim siteMapNodeCollection As SiteMapNodeCollection
If Not SiteMap.CurrentNode.Equals(SiteMap.RootNode) Then
If Not SiteMap.CurrentNode.HasChildNodes Then
' otherwise it'll go to the pseudo-current directory, which is wrong
Dim parentNode As SiteMapNode = SiteMap.CurrentNode.ParentNode.ParentNode
s.AddBackLink(parentNode.Url, parentNode.Title)
Else
Dim parentNode As SiteMapNode = SiteMap.CurrentNode.ParentNode
s.AddBackLink(parentNode.Url, parentNode.Title)
End If
End If
If Not SiteMap.CurrentNode.HasChildNodes Then
siteMapNodeCollection = SiteMap.CurrentNode.ParentNode.ChildNodes
Else
siteMapNodeCollection = SiteMap.CurrentNode.ChildNodes
End If
For Each siteMapNode As SiteMapNode In siteMapNodeCollection
GenerateLinks(siteMapNode, s)
Next
Return s.GetSiteNavigation()
End Function
Private Sub GenerateLinks(ByRef siteMapNode As SiteMapNode, ByRef siteNavigation As SiteNavigation)
If siteMapNode.Url.Length = 0 And siteMapNode.Description = "separator" Then
siteNavigation.AddSeparator()
ElseIf siteMapNode.Url.Length = 0 And siteMapNode.Description = "heading" Then
siteNavigation.AddHeading(siteMapNode.Title)
Else
siteNavigation.AddLink(siteMapNode.Url, siteMapNode.Description, siteMapNode.Title, siteMapNode.HasChildNodes)
End If
End Sub
對不起,這就是我的意思。我前幾天寫得很快,所以它不完美,但現在它完成了這項工作。我使用的是站點地圖,並給出了某些元素沒有網址,而是使用「分隔符」等描述來指示<li>
元素以不同的方式呈現(將不同的類應用於此HTML元素)。
啊是的,我還沒有實施任何幫手。可能性是它會觸發數據庫查詢的權限。我還不確定。它實際上只是輸出一些HTML。我很快就會對HTML助手產生興趣。 – Kezzer 2009-04-23 11:53:15
我會重構它,以便它不會生成HTML。在MVC中,這最好留給視圖,而不是控制器操作。 HtmlHelpers應該對控制器提供的數據進行操作,而不是進行數據庫查詢。如果您將DB訪問權限構建到幫助程序中,您將會破壞關注點。 – tvanfosson 2009-04-23 12:07:50