Jquery MVC4和Knockout.js中的级联下拉列表,JSON根据验证器返回有效的JSON,但Jscript返回无效字符错误
我有一个MVC4网站,需要高度动态的数据级联下拉列表。我使用在线教程和许多堆栈交换问题来构建查询和javascript函数 我正在使用的版本有VisualStudio2012、jquery 2.0.1、knockout 2.2.1和dot net 4.5 请求头接受application/json,响应内容类型返回application/json。响应的内容长度与返回的内容字符串中的字符数匹配 我现在得到的是返回一个验证为有效的JSON字符串,但是当我警告同一个字符串时,会得到一个无效字符。“我的孩子”下拉列表填充正确数量的选项,但选项为空 相关代码: Cascader.jsJquery 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字符串,但是当我警告同一个字符串时,会得到一个无效字符。“我
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谢谢!就这样。