1

この質問はSOで何度も対処されていることを知っていますが、私の人生ではそれを機能させることができず、提案された解決策のどれも私の問題を解決していません。ここにシナリオがあります。ユーザーがデータを入力して画像をアップロードするメインフォームがあります。アップロードは ajax 経由で (valum のファイル アップローダーを使用して) 行われるため、ファイルがアップロードされるとすぐにコントローラーにポストされます。次に、画像サーバー側のサイズを変更し、部分ビュー内に含まれるサムネイルを返します。部分ビューは、ユーザーが詳細を入力するのと同じビューにあります。これは最初はすべて問題なく機能し、ファイルがサーバーに送信され、サムネイルが生成されて部分ビューに返されますが、これは発生していません2回目。これがメインフォームです。ThumbnailDiv):

@using (Html.BeginForm("Upload","Home", FormMethod.Post)) 
{
    @Html.ValidationSummary(true)
    <fieldset >
      //Some input fields
      //Uploader
            <div id="file-uploader">
                <noscript>
                    <p>Please enable JavaScript to use file uploader.</p>
                </noscript>
            </div>
    </fieldset>
}
        <input type="submit" value="View thumbnail" id="btnGetThumbnail" />
        <div id="ThumbnailDiv" style="float: right;width: 500px; height: 500px;">
        </div>


<script type="text/javascript">
    $(document).ready(function () {
        $("#btnGetThumbnail").click(function (e) {
            e.preventDefault();

            var myDiv = $('#ThumbnailDiv');
            $.ajax({
                url: '@Url.Action("GetThumbnail", "Home")',
                type: 'GET',
                cache: false,
                success: function (result) {
                    myDiv.html(result);
                }
            });

        });
    });

</script>

GetThumbnailHome コントローラーでのアクションは次のとおりです。

    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
    public ActionResult GetThumbnail()
    {
        ViewBag.TheTime = System.DateTime.Now.ToString();
        return PartialView("~/Views/Home/ThumbnailFinal.cshtml",mvm);
    }

現在の時刻を部分ビューに渡して、リクエストが更新されているかどうかを確認していますが、ビューにサムネイル画像を再レンダリングするように指示できないようです。部分図 ( ThumbnailFinal.cshmtl) は次のとおりです。

@ViewBag.TheTime

<img src="@Url.Action("GenerateThumbnail")" alt="" />

問題:

画像が更新されておらずGenerateThumbnail、2 回目のアクションの呼び出しに失敗しています。時間が更新されているので、GetThumbnailアクションが呼び出されたことはわかっていますが、画像は2回目にアクションを思い出していませんGenerateThumbnail。どうすればこれを解決できますか? 部分ビュー内のアクションから画像をレンダリングするより良い方法はありますか?

どんな助けでも大歓迎です。

4

1 に答える 1

4

画像がクライアントにキャッシュされているようです。ランダムなクエリ文字列パラメーターを追加することで、キャッシュを破棄できます。

<img src="@Url.Action("GenerateThumbnail", new { seed = DateTime.UtcNow.Ticks })" alt="" />

または、アクションで行ったのと同じ方法で、コントローラー アクションのキャッシュを属性でGenerateThumbnail装飾して無効にします。[OutputCache]GetThumbnail

于 2012-12-04T07:59:40.017 に答える