上传图片并立即在ASP .Net MVC C#页面上显示它

时间:2015-04-02 00:36:23

标签: c# asp.net-mvc http-post

要上传图片我使用简单的帖子形式:

查看:

<img src="@getImagePath()" />
@using(Html.BeginForm("SaveImage", "ImageController", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="image" />
    <input type="submit" value="Upload image" />
}

发布操作:

[HttpPost]
[NoCache]
public ActionResult SaveImage(HttpPostedFileBase image)
{
    SaveImage(image);
    return RedirectToAction("Index");
}

页面操作:

[NoCache]
public ViewResult Index()
{
     return View();
}

所以基本情况是:我得到显示图像的页面和表单以上传此图像。我上传图像,基本上重新加载页面,所以应该显示新上传的图像,但我看到的只是旧图像。当我再次手动刷新页面时,我看到我上传的新图像。 如何强制浏览器显示新图片而不是显示新图片?我建议,它会存储在其缓存中吗?为实现此目的,我实施了NoCacheAttribute并将其用于IndexSaveImage行动。

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public sealed class NoCacheAttribute : FilterAttribute, IResultFilter
{
    public void OnResultExecuting(ResultExecutingContext filterContext){}

    public void OnResultExecuted(ResultExecutedContext filterContext)
    {
        var cache = filterContext.HttpContext.Response.Cache;
        cache.SetCacheability(HttpCacheability.NoCache);
        cache.SetRevalidation(HttpCacheRevalidation.ProxyCaches);
        cache.SetExpires(DateTime.Now.AddYears(-5));
        cache.AppendCacheExtension("private");
        cache.AppendCacheExtension("no-cache=Set-Cookie");
        cache.SetProxyMaxAge(TimeSpan.Zero);
        cache.SetNoStore();
    }
}

但这个解决方案对我没有帮助。 我仍然需要手动刷新页面才能看到新上传的图片。

0 个答案:

没有答案