0

MS SQL データベースからデータを取得し、Google Visualization API を使用してこれらのグラフを Web ビューに表示する 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) {

                }
            }
        });
}

メインコントローラー このページのメソッド:

        public ActionResult ActionResultName(EventTypeParameterNameEditModel model)
    {
        var viewModel = new EventTypeParameterNameViewModel(_queryMenuSpecific);
        viewModel.EventType = model.EventType;
        viewModel.ParameterName = model.ParameterName;
        PopulateFilters(viewModel);
        return this.View(viewModel);
    }

JSON データ コントローラー メソッドを取得します。

        public ActionResult ActionResultNameJson(EventTypeParameterNameEditModel filters)
    {
        List<CustomDataType> results = this.GetTradeValues(filters);
        return this.Json(results, JsonRequestBehavior.AllowGet);
    }

編集かなり厄介なものであっても、解決策を見つけることができました。ユーザーがデバイスと OS でフィルター処理できるページにいくつかのフィルターが組み込まれていますが、これらはページの読み込み時に「未定義」で読み込まれていました。NHProf Running で初めてこのラウンドに気付きませんでしたが、XML からの入力を構成する前にページがロードされたときには発生していませんでした。これを回答として追加し、それを受け入れて質問を閉じます。ご協力いただきありがとうございます。このコミュニティが本当に好きになり始めています。大学院開発者としてのヘルプを見つけるのに最適な場所です。

4

2 に答える 2

0

うん。私はRazor構文の専門家ではありませんが、これらのプロパティ参照がおそらくあなたの問題だと思います。かみそりは、JSコンテキストのプロパティを持つステートメントで使用されている文字列内で自分自身を主張することを避ける傾向があると思います。または、おそらく機能するゲッター関数として実装してみることができます。それ以外の場合は、@と。文字列内では、明らかなメソッド呼び出しではない場合、電子メールアドレスとの混同を簡単に引き起こす可能性があります。

queryString += '&eventType=' + '@Model.EventType';
queryString += '&parameterName=' + '@Model.ParameterName';

サーバーからクライアント側へのシナリオの一般的なルールとして、私のアドバイスは、JavaScriptをバックエンドからJSONオブジェクトのみに直接制限することです。そうすれば、httpリクエストウォールの両側で何が起こっているかをよりきめ細かく制御でき、クライアント側の開発者は、短期的に迅速に変更する必要がある場合に、どこで何かが構築されているかを把握する必要がありません。一般に、回避できる場合は、他のコードを使用して動作コードを作成しないでください。

最初は.netMVCのボスを納得させることができませんでしたが、彼は数か月後にゆっくりとアイデアを思いつきました。

また、URLベースパスと他のコンテキストシフトパラメータをすべてのページに読み込まれる標準のJSONオブジェクトに保存するため、JS開発者はHTMLでJSを操作する必要がなく、これらのリンクされたJSファイルを追加できます(私は理由を思い出してください。ただし、document.locationが常に機能するとは限りませんでした)。

最後に、JSをHTMLから除外するようにしてください。リンクしてください。手続き型POVの苦痛のようですが、私を信じてください。同じごちゃごちゃしたHTML/テンプレートの混乱の中ですべてではなく、それぞれ1つのボールとして3つの主要な懸念事項をジャグリングするとき、それは人生をはるかに楽にします。

于 2012-08-03T20:29:58.243 に答える
0

問題は私の Javascript にはないことが判明しました。そこには、ユーザーがモデル、オペレーティング システム、日付などの結果をフィルター処理できるフィルターがいくつかあります。これらは、データベースのオプションではない「未定義」でページの読み込み時に自動的に入力されていました。クエリの呼び出しでそれをキャッチするものを追加したところ、問題が解決したようです。

于 2012-08-06T09:36:07.760 に答える