2015-07-28 46 views
0

我們最近決定從一些新項目從asp.net webforms切換到asp.net mvc。作爲一個很長時間的webforms開發人員,我觀看了很多介紹性教程,並閱讀了很多文章和視頻。然而,有些東西仍然會讓我失去一點點(沒有雙關語)。我希望能在這裏得到社區的一些答案。ASP.NET MVC如何到

首先,我們有一個cms系統,我們需要用於客戶端。在系統中,他們顯然管理着web項目的導航(菜單)。我的第一個問題是,我將如何將這個動態導航添加到所有頁面(視圖)。在webforms中,我只需創建一個自定義用戶控件並將其放到masterpage或template上。我懷疑答案是viewmodels?或部分視圖?

第二個問題是相關的。通常我們會有幾頁在側面欄中顯示一些新聞。其他人不會。我是否會爲不同的場景創建不同的視圖模型,並使用各個部分?

我不期待一個明確的答案,但更多的指導方針/最佳實踐。任何輸入讚賞。

+0

只需觀察構建在asp.net MVC上的開源CMS。你的問題的答案都可以在那裏得到。 。 –

+6

這個問題*方式*太寬泛,無法在這裏以這種格式回答。 – Claies

+0

我知道這是相當廣泛的。我只是在尋找正確的方向來推動學習過程。所有的意見都讚賞 –

回答

0

你的問題是非常廣泛,所以我只會給一個實現這一目標的高層次方式。

對於菜單系統,您可以創建兩個Div元素,一個用於菜單,另一個用於內容。菜單div應該包含一個Action,它調用JavaScript來替換主Div的內容和Controller返回的Partial View

在你_Layout頁面,您可以像這樣

<body> 
    @Html.Action("RetrieveSideBar", "SideBar", new { area = "" }) 

    <div id="mainScreenDiv">        
      @RenderBody() 
    </div> 
</body> 

RetrieveSideBar呈現的菜單項

public class SideBarController : MyControllerBase { 
    /// <summary> 
    /// Retrieves the side bar. 
    /// </summary> 
    /// <returns></returns> 
    public ActionResult RetrieveSideBar() { 
     var menuItems = new List<MenuItem>(); 

     return PartialView("_SideBar", MenuItems()); 
    } 

    private List<MenuItem> NotAuthenticatedMenuItems() { 
     var menuItems = new List<MenuItem>(); 
     menuItems.Add(new MenuItem() { Title = "Register Firm", ActionUrl = Url.Action("Create", "FirmPreRegistration") }); 

     return menuItems; 
    } 
} 

哪裏MenuItem

public class MenuItem { 
    public string Title { get; set; } 
    public string ActionUrl { get; set; } 
} 

_SideBar呈現菜單如下

@model List<MenuItem> 

<ul class="nav nav-sidebar"> 
    @foreach (var menuItem in Model) { 
     <li class="text-info leftMenuHeading "> 
      <a href="#" onclick="NavigateTo('@menuItem.ActionUrl')"> 
      <span>@menuItem.Title</span> 
     </a> 
     </li> 
    } 
</ul> 

注意,點擊一個menu item電話NavigateTo被定義爲「_layout頁面如下

function NavigateTo(view) { 
    $.ajax({ 
     url: view, 
     type: "GET", 
     cache: false, 
    success: function(data) { 
     $('#mainScreenDiv').html(data); 

    }); 
} 

這將創建一個基於Ajax的導航系統,該系統將與頁面替換內容導航頁面,請注意Action方法需要返回PartialView否則_Layout再次呈現。

+0

我接受了這個答案,因爲它給了我一些關於接下來要做什麼/探索的指示。謝謝 –

0

My first question is, how would I go about to adding this dynamic navigation to all the pages (views). In webforms I would simply create a custom user control and throw it onto the masterpage or template.

Asp.Net MVC有類似的東西 - _Layout.cshtml。默認情況下,它位於視圖/共享文件夾內,它就像所有頁面的母版頁一樣。您可以按以下方式

public abstract class BaseController : Controller 
{ 
    public YourMenuModel YourMenuModel { get; set; } 

    public BaseController() 
    { 
     this.YourMenuModel = //load dynamically your menu. For example from database 

     ViewBag.MenuModel = this.YourMenuModel ; 
    } 
} 

裏面_layout查看您能得到您的菜單模式和以任何方式

@{ 
var YourMenuModel = (YourMenuModel)ViewBag.MenuModel; 
} 

Often we would have a few pages that show some news for example in a side panel. Others would not. Would I create a different viewmodel for the different scenarios, work with sections?

我會爲新聞創造局部視圖渲染並把生成的動態菜單它在一些意見

@Html.Partial("_YourNewsPartial") 
+0

謝謝你的部分意見的提示。我知道他們存在,但我會更深入地研究它們 –