0

ASP MVC ビューの 1 つで fancybox プラグインを使用して、Ajax 呼び出しを介してエラー メッセージを表示しています。ただし、結果をキャッシュしているようです。以下は、テーブルからエラーを取得するために使用する Linq クエリです。

    public JsonResult GetErrors(string term)
    {
        try
        {
            int id = int.Parse(term);

            var errors = (from e in db.TransmissionHistory
                          where (e.TransmissionTable == TABLE) &&
                                (e.TranTableId == id) &&
                                (e.ReplyResult == RESULT)
                          orderby e.TransmittedOn descending
                          select e).FirstOrDefault();

            if (errors == null)
            {
                return Json("Search returned no results", JsonRequestBehavior.AllowGet);
            }

            List<string> errs = new List<string>();

            errs = errors.Errors.Split(',').ToList();

            return Json(errs, JsonRequestBehavior.AllowGet);
        }
        catch (Exception)
        {
            return Json("There was an error processing your request, please try again", JsonRequestBehavior.AllowGet);
        } 
    }

最初の行にブレークポイントを設定した場合:int id = int.Parse(term); このコードは、fancybox/Ajax 呼び出しを開始する pic を最初にクリックしたときにのみ実行されます。その結果、これが fancybox モーダルに表示される唯一の情報になります。

クエリは(linq日付フィールドによって決定される) 最新のエラー メッセージを取得することになっていますが、fancybox/ajax 呼び出しを開始した後に新しいエラー メッセージが発生した場合、それは表示されません。代わりに、前のクエリの結果が単純に再度表示されます。また、繰り返しますが、この場合 (2 回目の呼び出しを開始する)、ブレークポイントは起動しません。

私はこのプラグインにあまり詳しくないので、これは何らかの方法で呼び出しの結果をキャッシュしていることを意味すると思います。ただし、fancybox のキャッシング プロパティやそれらを変更する方法について詳しく説明しているネットはあまり見つかりませんでした。参考までに、fancybox jquery を次に示します。

        $('.checkErrors').click(function () {
            var $tr = $(this).closest('tr');
            var firstName = $tr.find('td:nth-child(2)').text();
            var lastName = $tr.find('td:nth-child(3)').text();
            $.ajax({
                type: 'GET',
                url: '@Url.Action("GetErrors","AgentTransmission")',
                data: { term: $(this).attr('id') },
                dataType: 'json',
                success: function (data) {
                    var display = "<center><h2>" + firstName + " " + lastName + "</h2></center><ul>";

                    if (data == "Search returned no results" || data == "There was an error processing your request, please try again") {
                        display += "<li>" + data + "</li>";
                    } else {
                        $.each(data, function (key, value) {
                            display += "<li>" + value + "</li>";
                        });
                    }

                    display += "</ul>";

                    $.fancybox(display, {
                        // fancybox API options
                        fitToView: false,
                        autoScale: true,
                        autoDimension: true,
                        closeClick: true,
                        openEffect: 'fade',
                        closeEffect: 'fade',
                        closeBtn: true,
                        openSpeed: 'fast',
                        closeSpeed: 'fast'
                    });
                },
                error: function (data) {
                    $.fancybox("There was an error processing your request. We apologize for the inconvenience!", {
                        // fancybox API options
                        fitToView: false,
                        autoScale: true,
                        autoDimension: true,
                        closeClick: true,
                        openEffect: 'fade',
                        closeEffect: 'fade',
                        closeBtn: true,
                        openSpeed: 'fast',
                        closeSpeed: 'fast'
                    });
                }
            });
        });
4

1 に答える 1

1

これは、fancybox ではなく、Ajax 呼び出しでキャッシュ プロパティが設定されていないことが原因でした。cache: falseajax呼び出しに追加するだけで問題が解決しました。

于 2013-07-11T20:18:19.517 に答える