1

我已經回顧了很多已發佈在StackOverFlow上的問題,並且大多數答案都以CMS平臺爲基礎,而不是如何從頭開始實際創建一個。如何使用Asp.Net MVC創建CMS應用程序C#

搜索互聯網和書籍也沒有導致我的問題有任何有用的答案。

我對使用Asp.Net MVC相當陌生,想知道如何用C#中的Asp.Net,MVC,Entity Framework構建一個非常基本的CMS。

我的主要問題是創建不硬編碼到MVC控制器和物理上不定位爲Somepage.cshtml

數據庫驅動的網頁想知道如何做到以下幾點:

傳入網址: MainWebsite.com/DatabaseProvidedPage

目標是路由中的控制器在URL中沒有/ controller /的頁面默認爲數據庫驅動/創建的網頁。

想真正知道如何做到這一點。

沒有尋找一個平臺來使用它來做到這一點。

我想了解使用Asp.Net MVC創建CMS的基礎知識。

真的不想:

如何做到這一點?

網址:MainWebsite/DatabaseProvidedWebpage - >返回到用戶存儲在數據庫

感謝HTML,

+0

究竟你不知道該怎麼辦?將html存儲在數據庫中?寫入存儲的HTML到響應?獲取請求的網址以便在數據庫中搜索? – mclaassen

+0

返回給用戶存儲在數據庫中的HTML。 – Kbdavis07

+0

請參閱http://stackoverflow.com/questions/656455/building-a-cms-in-asp-net-mvc – nawfal

回答

2

實測解決方案:

路由
// Display Database Provided Page MainSite.Com/{PageName} 

routes.MapRoute("DatabasePage", 
"{PageName}", 
new { controller = "Home", 
action = "Index", 
PageName = "" 
}); 

控制器:

public ActionResult Index(String PageName) 
     { 
      if (PageName == null) 
       { 
        List<PageTable> pages = PagesRepository.GetAllPages(); 
        return View(pages); 
       } 

      PageTable FindPageName = PagesRepository.GetPageByURL(PageName); 



      if (FindPageName == null) 
       { 
        return Content(PageName); 
       } 


      if (FindPageName != null) 
       { 
        return View(FindPageName); 
       } 

      return View(""); 

     } 

查看
@model CMS_Repository.DAL.EF.PageTable 

@{ 
ViewBag.Title = "Details"; 
} 

<h2>Details</h2> 

    <div> 
    <h4>PageTable</h4> 
    <hr /> 
    <dl class="dl-horizontal"> 
     <dt> 
      @Html.DisplayNameFor(model => model.Title) 
      </dt> 

     <dd> 
      @Html.DisplayFor(model => model.Title) 
     </dd> 

     <dt> 
      @Html.DisplayNameFor(model => model.Content) 
     </dt> 

     <dd> 
      @Html.DisplayFor(model => model.Content) 
     </dd> 

     <dt> 
      @Html.DisplayNameFor(model => model.FriendlyURL) 
     </dt> 

     <dd> 
      @Html.DisplayFor(model => model.FriendlyURL) 
     </dd> 

     <dt> 
      @Html.DisplayNameFor(model => model.ControllerName) 
     </dt> 


</dl> 

1

腳手架自動爲您做到這一點,不僅沒有用的GUID。當你腳手架,你得到一個控制器與幾個動作,其中之一是細節。通過訪問/ Controller/Details/[id],您可以看到有關指定項目的詳細信息。爲您的HTML創建一個包含列的表格;我們稱之爲HTML。在詳細視圖中,寫入

@Html.Raw(Model.HTML) 
+0

你是什麼意思呢? – andypopa

+0

你指的是路由。這裏有一個完整的指南http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/asp-net-mvc-routing-overview-cs – andypopa

+0

所以問題是如何擁有MainSite.Com/ SomePageName ---> Result In - > MainSite.com/Controler/Details/[id] ----->換句話說,當一個用戶進入MainSite.Com/SomePageName時,他們會看到相同的東西,就像他們輸入在MainSite.com/Controler/Details/[id] --->目標是有一個較短的URL比MainSite.Com/Page/Details/5bcb7760-a355-4d26-842d-8f2b27855011 --->想要一個「友好」 URL我希望它更清楚:) – Kbdavis07

0

在MVC中,使用顯示/編輯器模板的概念。他們允許您:

  • 有更多的抽象意見。然後,視圖可以用作更具體的佈局(與更通用的_Layout.cshtml結合使用)。
  • 存儲特定頁面各種CLR類型的對象在你的持久存儲庫(無論是EF或其他任何東西)

的對象應該是強類型的,並且應該是分層次組成/聚集較其它對象的頁面的內部部分。然後

你的觀點可能是這樣的:

@model BikeStore.Models.BodyPartTwoSecondaryParts 

<div class="container body-part"> 
    @Html.DisplayFor(vm => vm.BodyPart) 
</div> 
<div class="container"> 
    <div class="inline-block half-width secondary-part"> 
     @Html.DisplayFor(vm => vm.FirstSecondaryPart) 
    </div> 
    <div class="inline-block half-width secondary-part"> 
     @Html.DisplayFor(vm => vm.SecondSecondaryPart) 
    </div> 
</div> 

這是可能的,因爲一旦它看到某一個CLR類型的數據出現在視圖模型MVC可以自動呈現的顯示/編輯模板。該模板基本上是一個普通的Razor文件,其名稱與CLR類型相同。

頁面甚至可能定義了幾個可視化表示(模板)。這是可能通過自定義HTML傭工調用它們的應用程序(即各種視圖)的各個部分:

例如,SearchResults.cshtml視圖可能只要致電:

@foreach (var item in Model.SearchResults) 
{ 
    @Html.SearchResultFor(vm => item) 
} 

的HTML輔助方法將是:

public static MvcHtmlString SearchResultFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression) 
{ 
    string typeName = expression.ReturnType.Name; 

    return htmlHelper.DisplayFor(expression, $"{typeName}Search"); 
} 

另一個問題是如何通過實體框架存儲任意深度結構的頁面。 (我省略選擇將其完整的HTML存儲爲nvarchar數據,因爲這是CMS應該幫助您避免的數據。)

我不知道這些代碼有多複雜。您可能會從我們公司的SDK中獲得JSON de-serializing logic的啓發。該方法構建一個強類型模型,然後您可以將其傳遞到MVC視圖並依賴顯示模板。

如果你希望看到上面的代碼示例,請看我的posts之一。您還可以檢查使用我們的無頭CMS作爲其永久存儲庫的working example app

相關問題