Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保持C和Javascript代码的同步?_Javascript_C#_Asp.net Mvc 5_Cross Platform_Dry - Fatal编程技术网

如何保持C和Javascript代码的同步?

如何保持C和Javascript代码的同步?,javascript,c#,asp.net-mvc-5,cross-platform,dry,Javascript,C#,Asp.net Mvc 5,Cross Platform,Dry,我认为这个问题可能会出现在任何人身上,我感兴趣的是如何最好地利用技术来保持代码库的干燥和同步 我正在开发一个ASP.NET MVC5 web应用程序。我有几个变量需要与客户端通信。比如PageType,我需要使用Google Analytics在客户端跟踪它。意图可能是多种多样的,这是一个具有相同目的的简单应用程序,仅供说明 我有一个C类,它允许我指定各种页面类型,并在它们之间切换开关大小写,例如: public static class PageTypes { public const

我认为这个问题可能会出现在任何人身上,我感兴趣的是如何最好地利用技术来保持代码库的干燥和同步

我正在开发一个ASP.NET MVC5 web应用程序。我有几个变量需要与客户端通信。比如PageType,我需要使用Google Analytics在客户端跟踪它。意图可能是多种多样的,这是一个具有相同目的的简单应用程序,仅供说明

我有一个C类,它允许我指定各种页面类型,并在它们之间切换开关大小写,例如:

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';在内联脚本的页面中,它将以var pageType='Home'的形式出现;或者在页面的内联javascript中使用一些示例,例如case。 现在,正如我对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的静态类PageTypes与JavaScript中的var PageTypes同步,那么对于我们的开发人员来说,Intellisense和预定义值将是一个福音,这样他们就可以避免输入错误和值的不兼容

在C和JavaScript中获得Intellisense的同时,实现这一点的最佳方法是什么

我更喜欢C语言中影响JS的变化,而不是相反的变化。switch语句不需要转换,只需要像我提到的那样转换常量值


我认为构建过程中的脚本可能很有用,但是有没有工具/插件/替代方法来完成我提到的任务?

如果我了解问题所在,您可以做的是:

使用模板引擎在html标记中的某个变量中设置pagetype抱歉,我不使用.Net,不知道如何编写它。在本例中,我在body元素中使用了data-*

在js中,检索示例中的数据类型值,我使用了jquery

变量类型=$body.datatype

在键/对象变量/对象中定义一些函数,每个函数对应于您的页面类型

var PageTypeFunctions={ 主页:功能{

},
aboutus: function() {

},
xpto: function() {

}
}

PageTypeFunctionstype


使用这种方法,您不必处理PageTypes变量。每个pagetype只需要一个函数。当然,您可以进行一些检查以验证PageTypeFunctions[type]存在。

设置data type=type并读取它与编写内联脚本然后使用变量没有什么不同。我最关心的是同步名称。明天如果我在C中添加一个pagetype NewPageType,编写JS的Javascript开发人员如何知道新页面类型的确切名称而不询问、不知道或“键入错误”如果没有他的知识,这就是我所说的智能感知有用的地方,这在你提到的这种情况下是不会出现的。我需要变量和常量的值,我需要它们是可切换的。它们必须同步。这些是我的要求。我正在寻找解决方案。我主要关心的是同步names:您可以编写一些生成javascript代码的C代码,可能是一个包含在带标记的html标记中的javascript文件。无论如何,js开发人员必须知道有一个新的页面类型,他必须在我的示例中执行一些实现,即某个页面类型的函数。页面类型的名称是不太重要的事情之一在这种情况下,我认为。相反,它是最重要的。键入这是您浏览器的控制台F12,在Chrome:var PageTypes={home:'home'}然后按Enter键。下次键入PageTypes时。在控制台中,将显示其成员。在这里,您将能够看到默认原型的属性以及PageTypes对象的成员主页。这是一项重要功能,它也将在Visual Studio Intellisense中工作。除非定义了此PageTypes变量,否则从JavaScript中无法知道像home这样的成员在其中有哪些。但是如果已经定义了home,那么开发人员在检查/比较时,或者在您的情况下,创建新变量/函数或将其用作对象或数组的键时,不必将home错误地键入为homes或homepage,或者以其他方式键入homehome”,他可以键入并与PageTypes进行比较。home和无论其字符串值如何,比较都会起作用。我的意图是否明确?我希望控制此var PageTypes的创建和维护与我的C代码同步。