运行代码替换每个剃刀视图MVC4上的占位符文本

时间:2013-05-14 20:57:23

标签: jquery asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

如果我有以下剃须刀页面: (请原谅可怕的例子......)

Page1.cshtml

Hello @Model.Name, welcome to {sitename}

Page2.cshtml

{sitename} has had @Model.visitorcount today

在运行时我想用“Contoso”替换{sitename}(此var来自设置类)以及其他标签

我可以使用jQuery:

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

这可能发生在_layoutViewStart文件中,以减少脚本,但我不喜欢这种方法。似乎它可能会导致很多代码混乱并且“看起来不对”

这里有更好的方法吗?也许使用控制器基类并以某种方式解析每个视图?

2 个答案:

答案 0 :(得分: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

中注册
public partial class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        //Blah blah blah

        GlobalFilters.Filters.Add(new SiteNameIntoViewBagAttribute ());

        //Blah blah blah
    }
}

答案 1 :(得分:0)

通常的做法是添加一个静态名称ViewModel或ViewBag - 这基本上就是它们的用途。我相信任何其他解决方案最终都会将逻辑放入真正属于控制器的视图中。