簡體   English   中英

使用Razor開發標准模板-ASPNET MVC

[英]Develop standard template using Razor - ASPNET MVC

我有一個項目ASPNET MVC5,使用項目定義的C#消失了,同意頁面布局的結構將存儲在數據庫中。

在我的_ViewStart內部, _Layouts.cshtml將引用該頁面的常見內容。 到目前為止,很好的問題是,內容將是具有所有HTML和Razor元素的從數據庫中獲取的網站結構,並在屏幕上呈現。 在簡單的HTML(當鴕鳥政策有剃刀),這將很好地工作下列一些替代品(視圖_layouts.cshtml代碼中ConteudoHTML會從銀行尋求並通過控制器返回):

  • @ViewBag.ConteudoHTML@Html.Raw(ViewBag.ConteudoHTML.ToString())
  • 創建一些幫助程序並在視圖中調用: @MeuHelper.Template(ViewBag.ConteudoHTML.ToString())

問題是我存儲在數據庫結構中已經包含對我的Models,ViewBag,Helpers等的引用。渲染瀏覽器時無法識別Razor元素(此外,在我看來,沒有顯式的RenderBody() ,編譯器將無法執行,即使我已經將其插入數據庫記錄旁邊)。

有人可以幫我嗎?

數據庫中的HTML代碼

<!DOCTYPE html>
<html lang="pt-br" xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br">
<head>
    <meta charset="utf-8" />    
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="@ViewBag.MetaDescription" />
    <meta name="keywords" content="@ViewBag.MetaKeywords" />   
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title>@ViewBag.Title</title>                
    <!--[if IE]><link rel="shortcut icon" href="~/css/images/favicon.ico"><![endif]-->
    <link rel="icon" href="@Url.Content("~/css/images/favicon.png")" />
    <link rel="stylesheet" type="text/css" href="@Url.Content("~/css/bootstrap.min.css")" />
@RenderSection("Css", required: false)
</head>

<body>
    @RenderBody()
</body>
</html>

控制器代碼:

public virtual ActionResult Index()    
{
    ViewBag.ConteudoHTML = "";//HTML vindo do banco, html acima
    ViewBag.Title = "Meu título";
    ViewBag.MetaDescription = "Description";
    ViewBag.MetaKeywords = "Keywords";
    return View();
}

查看代碼( _Layouts.cshtml

@ViewBag.ConteudoHTML

有關 Razor視圖解析為HTML的方法,請參見此問題 簡而言之,您可以使用視圖引擎查找視圖,為其創建上下文,然后使用該上下文呈現視圖,以便獲得HTML結果。

您為什么決定使用存儲在數據庫中的HTML? 聽起來這是一條很糟糕的道路,這將使您的頁面加載時間更長,並且很難維護。

您真的應該只對通用代碼使用布局頁面,這會使事情變得更加簡單。

剃刀視圖在使用之前先進行編譯。 您正在嘗試將字符串作為代碼注入視圖,但是直到視圖編譯完成后,這種情況才會發生。 您將需要一種動態創建剃刀視圖的方法來執行您想做的事情。 話雖如此,將標記存儲在數據庫中是一種主要的代碼味道。

我使用VirtualPathProvider解決了我的問題。

參考: http : //www.umbraworks.net/bl0g/rebuildall/2009/11/17/ASP_NET_MVC_and_virtual_views

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM