我认为这个问题可能会出现在任何人身上,我对如何充分利用技术以保持基于代码的DRY并保持同步感兴趣。
我正在开发一个ASP.NET MVC5 Web应用程序。我有几个变量需要与客户端进行通信。说“PageType”,我需要使用Google Analytics在客户端进行跟踪。意图可能是多种多样的,这是一个具有相同目的的简单应用程序,用于说明。
我有一个C#类,它允许我指定各种PageTypes,并在它们之间切换开关外壳,比如说:
public static class PageTypes {
public const String Home = "Home";
public const String AboutUs = "AboutUs";
public const String ContactUs = "ContactUs";
}
当我们检查动态值时,这非常有用,例如:
String pageType = ViewBag.PageType;
if(!String.IsNullOrWhiteSpace(pageType))
{
switch(pageType)
{
case PageTypes.Home:
// do something here
break;
case PageTypes.AboutUs:
// do something else here
break;
...
......甚至在进行比较时。我希望你明白这一点。
因此,在Razor视图中,我可以在内联脚本的页面中输出var pageType = '@ViewBag.PageType';
,并且它将在页面的内联javascript中以var pageType = 'Home';
或某些内容的形式显示。
现在,就像我使用C#代码一样,我希望能够在我的javascript中切换大小写页面类型。
// This part is dynamic so will be inline script of the razor view
var pageType = 'Home';
// This part is logic so can reside in an external script
// This part is just illustration, I will worry about naming and accessibility later
// This will be in a separate script and will be included, and will be referenced, thereby providing Intellisense within Visual Studio
var PageTypes = {
Home: 'Home',
AboutUs: 'AboutUs'
};
// I should be able to do this, in an external script
switch(pageType){
case PageTypes.Home:
alert('Home!');
break;
case PageTypes.AboutUs:
alert('Not Home');
break;
default:
alert('Nothing');
break;
}
可以看出,如果C#的static class PageTypes
与JavaScript中的var PageTypes
同步,那么对于我们的开发人员来说,使用Intellisense和预定义值会对他们带来好处,这样他们就可以了可以避免拼写错误和价值观的不兼容。
实现这一目标的最佳方法是什么,同时在C#和JavaScript中获得Intellisense?
我希望C#中的更改能够影响JS,而不是相反。不需要转换switch语句,只需像我提到的那样转换常量值。
我认为构建过程中的脚本可能很有用,但有没有任何工具/插件/替代方法来完成我提到的内容?
答案 0 :(得分:0)
如果我已经明白问题是什么,你可以做的是:
< body data-type =“%输出页面类型的一些模板引擎语法%”>
,检索数据类型值(在示例中,我使用了jquery)
var type = $(“body”)。data(“type”);
在键/对象变量/对象
中定义一些函数,每个函数用于您的pagetypevar PageTypeFunctions = { home:function(){
},
aboutus: function() {
},
xpto: function() {
}
}
从
调用该函数PageTypeFunctionstype;
使用这种方法,您不必处理PageTypes变量。每种页面类型只需要一个函数。当然,您可以进行一些检查以验证是否存在PageTypeFunctions [type]。