如果我有以下剃须刀页面: (请原谅可怕的例子......)
Page1.cshtml
Hello @Model.Name, welcome to {sitename}
Page2.cshtml
{sitename} has had @Model.visitorcount today
在运行时我想用“Contoso”替换{sitename}
(此var来自设置类)以及其他标签
我可以使用jQuery:
"$(body).replace("{sitename}", "Contoso")
这可能发生在_layout
或ViewStart
文件中,以减少脚本,但我不喜欢这种方法。似乎它可能会导致很多代码混乱并且“看起来不对”
这里有更好的方法吗?也许使用控制器基类并以某种方式解析每个视图?
答案 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 - 这基本上就是它们的用途。我相信任何其他解决方案最终都会将逻辑放入真正属于控制器的视图中。