我有一个 MVC4 网站,它需要具有高度动态数据的级联下拉菜单。我使用在线教程和许多堆栈交换问题来构建查询和 JavaScript 函数。
我正在使用的版本是 VisualStudio 2012、jquery 2.0.1、knockout 2.2.1、dot net 4.5。
请求标头接受 application/json 并且响应内容类型返回 application/json。响应的内容长度与返回的内容字符串中的字符数相匹配。
我现在所拥有的是返回一个JSONLint验证为有效的 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);
}
(再次,从 dotnet 专家指南复制并针对我的变量进行了修改)
通过 JSONLint 返回和验证的 JSON 样本:
{"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>
我做错了什么,我该如何解决?我花了两天时间试图追查这个问题,但我完全不知所措。