2013-05-14 47 views
0

如果我有以下剃刀網頁: (對不起可怕的例子。)運行的代碼,每個Razor視圖MVC4替換佔位符文本

Page1.cshtml

Hello @Model.Name, welcome to {sitename} 

Page2.cshtml

{sitename} has had @Model.visitorcount today 

並在運行時,我想用「Contoso的」更換{sitename}(此變種來自一個setti NGS類)以及其他標記

我可以使用jQuery的東西,如:

"$(body).replace("{sitename}", "Contoso") 

這可能在_layoutViewStart文件,以減少對腳本發生,但我不喜歡這種方法。似乎它可能會導致很多代碼混亂,並不「看起來合適」

有沒有更好的方法來採取?也許使用控制器基類,並以某種方式解析每個視圖?

回答

2

將ViewBag與全局過濾器結合使用。

E.g.

Page1.cshtml

Hello @Model.Name, welcome to @ViewBag.SiteName 

Page2.cshtml

@ViewBag.SiteName has had @Model.visitorcount today 

SiteNameIntoViewBagAttribute.cs

public class SiteNameIntoViewBagAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     filterContext.Controller.ViewBag.SiteName = GetSiteTitle(); 
    } 
} 

然後在global.asax中註冊它

​​
+0

這完美的作品。我考慮過'Viewbag',但之前沒有使用過濾器,我不知道這很容易。謝謝 – JustAnotherDeveloper

0

正常的做法是將sitename添加到您的ViewModel或ViewBag中 - 這實際上就是它們的用途。我相信任何其他解決方案最終都會將邏輯放到真正屬於控制器的視圖中。