我知道这个问题已在SO上多次得到解决,但对于我的生活,我无法让它工作,所提出的解决方案都没有为我解决问题。所以这是场景,我有一个主要表单,用户输入一些数据,并上传图片。上传是通过ajax(使用valum的文件上传器)进行的,因此文件一上传就会发布到控制器,然后调整图片服务器端的大小并返回包含在局部视图中的缩略图。部分视图与用户输入其详细信息的视图相同。这一切都在第一次完美正常,文件被发送到服务器并生成缩略图并返回到局部视图,但这不会发生第二次。这是Main表单,包含要返回部分视图的部分(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>
以下是Home控制器上的GetThumbnail
操作:
[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
操作。我该如何解决这个问题?有没有更好的方法从局部视图中的动作渲染图像?
非常感谢任何帮助。
答案 0 :(得分:4)
看起来图像缓存在客户端上。您可以通过附加随机查询字符串参数来破坏缓存:
<img src="@Url.Action("GenerateThumbnail", new { seed = DateTime.UtcNow.Ticks })" alt="" />
或禁用GenerateThumbnail
控制器操作上的缓存,方法是使用[OutputCache]
属性进行修饰,就像使用GetThumbnail
操作一样。