Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.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
Jquery MVC4和Knockout.js中的级联下拉列表,JSON根据验证器返回有效的JSON,但Jscript返回无效字符错误_Jquery_Json_Asp.net Mvc 4_Knockout 2.0_Cascadingdropdown - Fatal编程技术网

Jquery MVC4和Knockout.js中的级联下拉列表,JSON根据验证器返回有效的JSON,但Jscript返回无效字符错误

Jquery MVC4和Knockout.js中的级联下拉列表,JSON根据验证器返回有效的JSON,但Jscript返回无效字符错误,jquery,json,asp.net-mvc-4,knockout-2.0,cascadingdropdown,Jquery,Json,Asp.net Mvc 4,Knockout 2.0,Cascadingdropdown,我有一个MVC4网站,需要高度动态的数据级联下拉列表。我使用在线教程和许多堆栈交换问题来构建查询和javascript函数 我正在使用的版本有VisualStudio2012、jquery 2.0.1、knockout 2.2.1和dot net 4.5 请求头接受application/json,响应内容类型返回application/json。响应的内容长度与返回的内容字符串中的字符数匹配 我现在得到的是返回一个验证为有效的JSON字符串,但是当我警告同一个字符串时,会得到一个无效字符。“我

我有一个MVC4网站,需要高度动态的数据级联下拉列表。我使用在线教程和许多堆栈交换问题来构建查询和javascript函数

我正在使用的版本有VisualStudio2012、jquery 2.0.1、knockout 2.2.1和dot net 4.5

请求头接受application/json,响应内容类型返回application/json。响应的内容长度与返回的内容字符串中的字符数匹配

我现在得到的是返回一个验证为有效的JSON字符串,但是当我警告同一个字符串时,会得到一个无效字符。“我的孩子”下拉列表填充正确数量的选项,但选项为空

相关代码Cascader.js

        function CascadingViewModel() {
        this.DataID = ko.observableArray([]);
    }

var objVM = new CascadingViewModel();
ko.applyBindings(objVM);

function FetchData() {

    var selStepKindID = $("#StepKindID").val();
    $.getJSON("/TestStep/GetDataList/" + selStepKindID, null, function (data) {
        objVM.DataID(data);
        alert($.parseJSON(data));
    });

}
(从dotnet专家指南教程中为我的变量复制和修改)

返回Json的控制器例程:

public ActionResult GetDataList(int id)
{
    var dataView = ViewToUse(Convert.ToInt32(id));
    var test = this.Json(dataView, JsonRequestBehavior.AllowGet);
    return this.Json(new { DataID = dataView }, JsonRequestBehavior.AllowGet);
}
{"DataID":[{"Selected":false,"Text":"","Value":""},{"Selected":false,"Text":"1","Value":"txtUserName"},{"Selected":false,"Text":"2","Value":"txtPassword"},{"Selected":false,"Text":"3","Value":"txtClientCode"},{"Selected":false,"Text":"4","Value":"cmdLogon"},{"Selected":false,"Text":"5","Value":"cmdCancel"},{"Selected":false,"Text":"6","Value":"ForgotPassword"},{"Selected":false,"Text":"7","Value":"btnLogout"},{"Selected":false,"Text":"8","Value":"btnSearch"},{"Selected":false,"Text":"9","Value":"searchId"},{"Selected":false,"Text":"10","Value":"searchName"},{"Selected":false,"Text":"11","Value":"/reports/default.asp"},{"Selected":false,"Text":"12","Value":"You are not authorized to view this page"},{"Selected":false,"Text":"13","Value":"testFieldName"}]}

{"DataID":[{"Selected":false,"Text":"1","Value":"aname, xyzzzzzzzzz123, avalue, Supervisor"},{"Selected":false,"Text":"2","Value":"admin51, sadfgwagha51, avalue, External admin"}]}        
        <select id="DataID" name="DataID" data-bind="options: DataID, optionsText: 'Text', optionsValue: 'Value', optionsCaption: ' -- Please select a test step kind -- '">
        </select>
(同样,复制自dotnet专家指南,并针对我的变量进行了修改)

通过JSONLint返回并验证的JSON示例:

public ActionResult GetDataList(int id)
{
    var dataView = ViewToUse(Convert.ToInt32(id));
    var test = this.Json(dataView, JsonRequestBehavior.AllowGet);
    return this.Json(new { DataID = dataView }, JsonRequestBehavior.AllowGet);
}
{"DataID":[{"Selected":false,"Text":"","Value":""},{"Selected":false,"Text":"1","Value":"txtUserName"},{"Selected":false,"Text":"2","Value":"txtPassword"},{"Selected":false,"Text":"3","Value":"txtClientCode"},{"Selected":false,"Text":"4","Value":"cmdLogon"},{"Selected":false,"Text":"5","Value":"cmdCancel"},{"Selected":false,"Text":"6","Value":"ForgotPassword"},{"Selected":false,"Text":"7","Value":"btnLogout"},{"Selected":false,"Text":"8","Value":"btnSearch"},{"Selected":false,"Text":"9","Value":"searchId"},{"Selected":false,"Text":"10","Value":"searchName"},{"Selected":false,"Text":"11","Value":"/reports/default.asp"},{"Selected":false,"Text":"12","Value":"You are not authorized to view this page"},{"Selected":false,"Text":"13","Value":"testFieldName"}]}

{"DataID":[{"Selected":false,"Text":"1","Value":"aname, xyzzzzzzzzz123, avalue, Supervisor"},{"Selected":false,"Text":"2","Value":"admin51, sadfgwagha51, avalue, External admin"}]}        
        <select id="DataID" name="DataID" data-bind="options: DataID, optionsText: 'Text', optionsValue: 'Value', optionsCaption: ' -- Please select a test step kind -- '">
        </select>
(来自两次单独通话)

子项下拉列表:

public ActionResult GetDataList(int id)
{
    var dataView = ViewToUse(Convert.ToInt32(id));
    var test = this.Json(dataView, JsonRequestBehavior.AllowGet);
    return this.Json(new { DataID = dataView }, JsonRequestBehavior.AllowGet);
}
{"DataID":[{"Selected":false,"Text":"","Value":""},{"Selected":false,"Text":"1","Value":"txtUserName"},{"Selected":false,"Text":"2","Value":"txtPassword"},{"Selected":false,"Text":"3","Value":"txtClientCode"},{"Selected":false,"Text":"4","Value":"cmdLogon"},{"Selected":false,"Text":"5","Value":"cmdCancel"},{"Selected":false,"Text":"6","Value":"ForgotPassword"},{"Selected":false,"Text":"7","Value":"btnLogout"},{"Selected":false,"Text":"8","Value":"btnSearch"},{"Selected":false,"Text":"9","Value":"searchId"},{"Selected":false,"Text":"10","Value":"searchName"},{"Selected":false,"Text":"11","Value":"/reports/default.asp"},{"Selected":false,"Text":"12","Value":"You are not authorized to view this page"},{"Selected":false,"Text":"13","Value":"testFieldName"}]}

{"DataID":[{"Selected":false,"Text":"1","Value":"aname, xyzzzzzzzzz123, avalue, Supervisor"},{"Selected":false,"Text":"2","Value":"admin51, sadfgwagha51, avalue, External admin"}]}        
        <select id="DataID" name="DataID" data-bind="options: DataID, optionsText: 'Text', optionsValue: 'Value', optionsCaption: ' -- Please select a test step kind -- '">
        </select>


我做错了什么?我如何修复它?我花了两天时间试图找到这个,我完全不知所措。

基于您的示例JSON,
$中的
数据
变量。getJSON
回调不直接包含您的数组,但它被包装在一个对象中,
“DataID”
属性包含您的实际元素数组

因此,在
$.getJSON
中,使用
data.DataID
而不是
data

$.getJSON("/TestStep/GetDataList/" + selStepKindID, null, function (data) {
        objVM.DataID(data.DataID);
    }); 

尝试使用
objVM.DataID(data.DataID)
在你的
$.getJSON
@nemesv谢谢!就这样。