Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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/jquery/86.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#ASP MVC中的JavaScript问题_C#_Jquery_Asp.net Mvc_Google Visualization_Castle - Fatal编程技术网

C#ASP MVC中的JavaScript问题

C#ASP MVC中的JavaScript问题,c#,jquery,asp.net-mvc,google-visualization,castle,C#,Jquery,Asp.net Mvc,Google Visualization,Castle,我们有一个web项目,它从MS SQL数据库获取数据,并使用Google Visualization API在web视图上显示这些图表 最近,我们添加了castle windsor,因此我们可以使用XML文件为不同的用户配置应用程序。在添加此项之前,该视图工作良好,使用了此查询所需的烘焙参数。出于某种原因,当我们从XML文件发送参数时(使用断点运行表明参数正在传递给页面的主控制器操作),数据不会返回。下面是一些代码 JavaScript <script type="text/javascr

我们有一个web项目,它从MS SQL数据库获取数据,并使用Google Visualization API在web视图上显示这些图表

最近,我们添加了castle windsor,因此我们可以使用XML文件为不同的用户配置应用程序。在添加此项之前,该视图工作良好,使用了此查询所需的烘焙参数。出于某种原因,当我们从XML文件发送参数时(使用断点运行表明参数正在传递给页面的主控制器操作),数据不会返回。下面是一些代码

JavaScript

<script type="text/javascript">
var csvDataUrl = '@Url.Action("TradeValuesDataCsv", "Dashboard")';
var jsonDataUrl = '@Url.Action("TradeValuesDataJson", "Dashboard")';
 google.load("visualization", "1", { packages: ['table', 'corechart', 'gauge'] });
 google.setOnLoadCallback(drawCharts);
 drawCharts();

 $("body").on({
     ajaxStart: function () {
         $(this).addClass("loading");
     },
     ajaxStop: function () {
         $(this).removeClass("loading");
     }
 });

function drawCharts() {
    var queryString = 'platform=' + $('#PlatformDropDownList').val();
    queryString += '&startDate=' + $('#startDatePicker').val();
    queryString += '&endDate=' + $('#endDatePicker').val();
    queryString += '&model=' + $('#ModelDropDownList').val();
    queryString += '&eventType=' + '@Model.EventType';
    queryString += '&parameterName=' + '@Model.ParameterName';
        $.ajax({
            type: "POST",
            url: jsonDataUrl,
            data: queryString,
            statusCode: {
                200: function (r) {
                    drawToolbar(queryString);
                    drawTable(r);
                    drawChart(r);
                },
                400: function (r) {

                },
                500: function (r) {

                }
            }
        });
}
检索JSON数据控制器方法:

        public ActionResult ActionResultNameJson(EventTypeParameterNameEditModel filters)
    {
        List<CustomDataType> results = this.GetTradeValues(filters);
        return this.Json(results, JsonRequestBehavior.AllowGet);
    }
public ActionResult ActionResultNameJson(EventTypeParameterNameEditModel筛选器)
{
列表结果=this.GetTradeValues(过滤器);
返回this.Json(results,JsonRequestBehavior.AllowGet);
}

编辑我已经设法找到了一个解决方案,即使它相当混乱。我在页面中内置了一些过滤器,允许用户按设备和操作系统进行过滤,这些过滤器在页面加载时使用“undefined”填充。第一次运行NHProf时,我没有注意到这一点,但在我们将输入配置为来自XML之前加载页面时,这并没有发生。我将添加此作为答案,接受它并结束问题。谢谢大家的帮助。开始真正喜欢这个社区了。作为一名研究生开发人员,这是一个寻求帮助的绝佳场所。

是的。我不是Razor语法专家,但我认为这些属性引用可能是您的问题。我怀疑razor倾向于避免在JS上下文中具有属性的语句中使用的字符串中断言自己。或者您可以尝试实现作为getter的函数,这可能会起作用。否则一个@和一个。当不是一个明显的方法调用时,字符串中的字符串很容易导致与电子邮件地址混淆:

queryString += '&eventType=' + '@Model.EventType';
queryString += '&parameterName=' + '@Model.ParameterName';
作为任何服务器到客户端场景中的一般规则,我的建议是将JavaScript直接从后端限制为仅限于JSON对象。这样,您就可以更精确地控制http请求墙两侧正在发生的事情,并且您的客户端开发人员不必在短期内需要快速修改的情况下确定构建内容的位置。一般来说,如果可以避免的话,不要用其他代码构建行为代码

起初我无法说服我的.NETMVC老板,但几个月后他自己慢慢地接受了这个想法

我们还在一个标准JSON对象中存储一个URL基本路径和一些其他上下文转换参数,该对象加载到每个页面上,这样JS开发者就可以添加这些东西链接到JS文件,而不必在HTML中使用JS(我不记得为什么,但document.location并不总是起作用)


最后,尝试将JS排除在HTML之外。链接它。这似乎是程序性POV带来的痛苦,但相信我。当你将3个主要问题作为一个球来处理,而不是将所有问题都放在一堆杂乱无章的HTML/模板中时,你的生活会变得更加轻松。

事实证明,问题不在我的Javascript中。我有一些过滤器,允许用户过滤我的模型、操作系统、日期等等的结果。这些文件在页面加载时自动填充为“undefined”,这不是数据库中的选项。我在对查询的调用中添加了一些内容来捕捉这一点,它似乎解决了问题

客户端发生了什么?“未归还”有点模糊。您得到的状态码是什么(我相信您可以检查jqXHR对象以了解这一点)?是否存在javascript错误?在我们进一步讨论之前,您的团队是否喜欢JavaScript中try/catch中的空catch语句?如果是这样的话,用棍子打他们的头,然后把它移走,这样我们就可以看到发生了什么。没有错误代码。我正在加载它所针对的web页面,页面加载很好,Ajax永远不会启动,图表或表格也不会出现。自从我们改变了传递值的方式之后,javascript没有发生任何变化,除了:queryString+='&eventType='+'@Model.eventType';queryString+='¶meterName='+'@Model.parameterName';这两条线。在我们改变数据通过模型和控制器的方式之前,它工作得很好。您确定您的查询字符串得到的是@eventType=whateveryouexpected vs@eventType=@Model.eventType吗?在ajax调用之前试试Console.Log($queryString)。是的,JS已经从HTML中删除了,它只是在那里开发的,以便于重构前的开发人员测试。
queryString += '&eventType=' + '@Model.EventType';
queryString += '&parameterName=' + '@Model.ParameterName';