非常に動的なデータを含むカスケード ドロップダウンが必要な MVC4 Web サイトがあります。オンラインのチュートリアルと多くのスタック交換の質問を使用して、クエリと JavaScript 関数を作成しました。
私が使用しているバージョンは、VisualStudio 2012、jquery 2.0.1、ノックアウト 2.2.1、ドット ネット 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));
});
}
(ドットネット エキスパート ガイド チュートリアルから自分の変数用にコピーして変更しました)
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 Expert Guide からコピーし、変数用に変更しました)
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"}]}
(2 つの別々の呼び出しから)
子ドロップダウン:
<select id="DataID" name="DataID" data-bind="options: DataID, optionsText: 'Text', optionsValue: 'Value', optionsCaption: ' -- Please select a test step kind -- '">
</select>
私は何を間違っていますか、どうすれば修正できますか? 私はこれを追跡するのに 2 日間を費やしましたが、完全に途方に暮れています。