在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。
究竟你不知道該怎麼辦?將html存儲在數據庫中?寫入存儲的HTML到響應?獲取請求的網址以便在數據庫中搜索? – mclaassen
返回給用戶存儲在數據庫中的HTML。 – Kbdavis07
請參閱http://stackoverflow.com/questions/656455/building-a-cms-in-asp-net-mvc – nawfal