ChromeとFFで完璧に機能するツールがあります。しかし、IEのどのバージョンでも、ブラウザはデータを取得するためにAjaxをプルするよりもキャッシュ情報を表示しています。 Iループを通っている私はのcriteriasを持ってAjax経由でキャッシュデータを表示するInternet Explorer 304の結果
:
@foreach (var item in Model)
{
<div class="sizeTDCriteria">
@Html.DisplayFor(modelItem => item.Text)
</div>
<div class="sizeTDCriteriaAction">
@Ajax.ImageActionLink(Url.Content("~/Content/images/icons/edit.png"), "Edit Criteria", "AddOrEditCriteria", "Management", new { competencySectionId = ViewBag.competencySectionId, criteriaId = item.Id }, new AjaxOptions { UpdateTargetId = "AddOrEditCriteriaFormContainer" }, new { @class = "iconPosition" })
@Ajax.ImageActionLink(Url.Content("~/Content/images/icons/delete.png"), "Delete Criteria", "RemoveCriteria", "Management", new { criteriaId = item.Id }, new AjaxOptions { UpdateTargetId = "CompetenciesManagementWrapper" }, new { @class = "iconPosition" })
</div>
}
ImageActionLinkは内の画像とActionLinkのを作成し、ヘルパーがちょうど、私はこれをやってみたことである。ここ
は私の設定です正常なActionLinkと問題が同様に発生するので、あなたはそれを無視することができます。また、ImageActionLink全体を、<img>
で、jQueryトリガーを変更せずに変更しようとしました。
ユーザーが編集リンクをクリックすると、 "AddOrEditCriteria"、そのActionResultにajax呼び出しが行われ、条件が見つけられ、PartialViewフォームがdiv "#AddOrEditCriteriaFormContainer"に表示されます。 これまでのところ、すべてのブラウザでうまくいきました。
しかし、編集でもう一度クリックすると、IEはajax呼び出しの代わりに、他のすべてのブラウザが正しくデータを取り込んだときに、PartialViewをキャッシュ内に表示します(これは必須です。そのビューは基準を編集することを可能にし、その間に他の誰かによって編集された可能性があります)。
奇妙な部分はIEが呼び出しを行っているが、何とかそれがサーバーに到達したことがない、それだけであなたは、このネットワークキャプチャから見ることができる結果304を使用して、キャッシュを使用することである:
URL Method Result Type Received Taken Initiator Wait?? Start?? Request?? Response?? Cache read?? Gap??
/PerformanceMVC/Management/AddOrEditCriteria?competencySectionId=178&criteriaId=369&X-Requested-With=XMLHttpRequest GET 304 text/html 182 B < 1 ms JS Library XMLHttpRequest
/PerformanceMVC/Management/AddOrEditCriteria?competencySectionId=178&criteriaId=369&X-Requested-With=XMLHttpRequest GET 304 text/html 182 B < 1 ms JS Library XMLHttpRequest
/PerformanceMVC/Management/AddOrEditCriteria?competencySectionId=178&criteriaId=369&X-Requested-With=XMLHttpRequest GET 200 text/html 1.53 KB 1.24 s JS Library XMLHttpRequest
最後1つは最初に起こり、最初の2つは後に行われ、304のリターンを得ています。
ajax呼び出しに「breakcache」パラメータを追加して乱数を付けて修正する方法がありましたが、それは良い解決策のようには見えません。
IEのために更新されるべきでないデータが表示されるため、この問題はユーザーを悩ませています。
ありがとう!これはうまくいきました。ヘルパーの代わりにjquery.ajaxを使用し、 'cache:false'を使用すると問題が解決しました。しかし、あなたはjqueryを使うために私のすべてのビューを編集する必要はありません。反対側では、jquery.ajaxのようにヘルパーがキャッシュオプションを持つことを期待しています:/ もう一度ありがとう! – LanFeusT
もう一つの選択肢として、私はコントローラーレベルでのコントロールが好きです:http://stackoverflow.com/questions/1160105/asp-net-mvc-disable-browser-cache/5546328#5546328 –
@AdamTuliperこの属性を持つコントローラーをターゲットにすることができます、あまりにも。 –