3

所以这是我的场景。

我使用 ASP.NET MVC 3 以及 HTML、CSS、JavaScript/JQuery 来制作 Web 应用程序。我正在使用 Visual Studio 2010

我们已经发布了产品(它在 1.0 中),但是现在我们处于项目的“维护”模式,我感觉随着项目添加了新功能,维护一组常量会更加困难在 C# (ASP.NET MVC) 和 JavaScript 之间。

例如,在 JavaScript 中,我会创建一个 $.post 并让它链接到 MVC url Controller/Action,然后我会传入参数 { key1: value1, key2: value2}

问题是,如果 C# 参数名称更改或签名中参数的位置更改,我只会在运行时知道 JavaScript 需要更新(我假设我是一个不了解架构的程序员足以在运行前执行此操作)。

所以我的问题是,您如何更轻松地管理 JavaScript 端,以便我可以与 C# 端所做的更改保持“同步”。编译器可以以某种方式为我做这件事,还是有一个插件可以帮助我?

谢谢。

4

3 回答 3

1

您的问题询问了有关同步 C# 常量和 JavaScript 常量的问题,但也谈到了参数名称和位置。

在 MVC 世界中,参数的位置比名称更重要,而且我还没有找到一种在没有大量单元和集成测试的情况下保持同步的好方法。你在做这些测试,对吧?;)

至于实际的常量和枚举,我已经开始使用 T4 模板为我需要的常量/枚举生成一个 .cs 和一个(命名空间的).js 文件(在我的情况下,在数据库之外,但可能只是很容易成为其他任何东西)。

于 2013-04-16T22:20:27.290 回答
0

我想不出任何简单的方法,但这里有一些可能会有所帮助的方法。当我通常开发一些网站时,首先我尝试在视图中编写尽可能少的 javascript 代码并将它们全部放在 .js 文件中,这样你可以确保你可以重用许多代码,因为那里的所有代码都是纯 javascript不会是你提到的任何问题。我还将所有操作及其控制器和区域名称记录在数据库中,并将它们用于管理权限和安全问题。对于您的问题,您可以将所有这些方法添加到数据库中,然后使用一段代码检查该方法是否存在。

添加到数据库:(在基本控制器中,因此您无需手动执行任何操作)

protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var area = filterContext.RouteData.DataTokens["area"];
            string areaName = area != null ? area.ToString() : "";
            var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
            string actionName = filterContext.ActionDescriptor.ActionName;

           //Add to DB
            base.OnActionExecuting(filterContext);
        } 

检查是否存在:

bool exist = false;
 try
 {
      HttpWebRequest request = (HttpWebRequest)System.Net.WebRequest.Create("http://www.example.com/image.jpg");
      using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
      {
           exist = response.StatusCode == HttpStatusCode.OK;
      }
 }
 catch
 {
 }
于 2013-04-16T19:08:35.753 回答
0

您最好的选择是集成测试。您将能够准确地测试您的用户会执行的操作。Seleno是编写集成测试的好选择(它包装了 Selenium)。

这是值得做的。如果您有良好的集成测试覆盖率,您将在生产中遇到更少的错误。

于 2015-06-30T23:36:21.440 回答