我有一个javascript包,我只想在测试时包含,而不是在代码部署到生产时。
我添加了一个名为IsEnabledTestingFeatures
的属性。在BundleConfig.cs文件中,我这样访问它:
if(Properties.Settings.Default.IsEnabledTestingFeatures) {
bundles.Add(new ScriptBundle("~/bundles/testing").Include("~/Scripts/set-date.js"));
}
这是正常的。
现在,如果此属性设置为true,我只想在我的页面中包含包。
我尝试过以下内容,但编译器抱怨它无法找到Default
命名空间:
@{
if( [PROJECT NAMESPACE].Properties.Default.IsEnabledTestingFeatures)
{
@Scripts.Render("~/bundles/testing")
}
}
我尝试了如何从Controller本身访问Scripts.Render
功能,但一直没有成功。
我更喜欢在视图中添加捆绑包,但愿意通过Controller添加它。
答案 0 :(得分:9)
ViewBag
不一定是必要的......
使用 web.config 中的appSettings
,您无需重新编译进行测试,并且可以轻松部署。
<appSettings>
<add key="TestingEnabled" value="true" />
</appSettings>
查看或布局
@{
bool testing = Convert.ToBoolean(
System.Configuration.ConfigurationManager.AppSettings["TestingEnabled"]);
}
@if (testing) {
@Scripts.Render("~/bundles/testing")
}
我会在"~/bundles/testing"
中定义BundleConfig
,无论测试条件如何,除非您希望将其与其他脚本捆绑在一起。
如果您从AppSettings分配了Properties.Default.IsEnabledTestingFeatures
,则问题的根源就是您实施属性的方式。
答案 1 :(得分:5)
希望提出另一种[read:better]解决方案,我已经使用ViewBag实现了它。
<强> BundleConfig.cs 强>
//if testing features are enabled (eg: "Set Date"), include the necessary scripts
if(Properties.Settings.Default.IsEnabledTestingFeatures)
{
bundles.Add(new ScriptBundle("~/bundles/testing").Include(
"~/Scripts/set-date.js"));
}
<强>控制器强>
public ActionResult Index()
{
ViewBag.IsEnabledTestingFeatures = Properties.Settings.Default.IsEnabledTestingFeatures;
return View();
}
查看强>
@if (ViewBag.IsEnabledTestingFeatures != null && ViewBag.IsEnabledTestingFeatures)
{
@Scripts.Render("~/bundles/site")
}
一些注释:
由于这个原因,我没有通过ViewModel中的属性实现此功能 属性/功能独立于显示的数据。它 似乎不正确将此条件与个人数据相关联 模型,因为它是一个站点范围的功能。
我使用了应用程序级设置,因为我们利用Web转换,因此在每个环境的基础上配置此属性会更容易。因此,每个环境都可以根据需要设置此属性。