1

我知道这个问题已经在 SO 上解决了很多次,但是在我的一生中我无法让它发挥作用,所提出的解决方案都没有为我解决问题。所以这是场景,我有一个主窗体,用户输入一些数据并上传图片。上传是通过 ajax 进行的(使用 valum 的文件上传器),因此文件在上传后立即发布到控制器,然后我调整图片服务器端的大小并返回包含在部分视图中的缩略图。局部视图与用户在其中输入详细信息的视图位于同一视图上。这一切都在第一次工作得很好,文件被发送到服务器并生成缩略图并返回到局部视图,但这并没有发生第二次。这是主要形式,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第二次调用该操作失败。时间正在更新,所以我知道该GetThumbnail动作被调用,但是图像没有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 回答