[英]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
剃刀視圖在使用之前先進行編譯。 您正在嘗試將字符串作為代碼注入視圖,但是直到視圖編譯完成后,這種情況才會發生。 您將需要一種動態創建剃刀視圖的方法來執行您想做的事情。 話雖如此,將標記存儲在數據庫中是一種主要的代碼味道。
我使用VirtualPathProvider解決了我的問題。
參考: http : //www.umbraworks.net/bl0g/rebuildall/2009/11/17/ASP_NET_MVC_and_virtual_views
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.