【问题标题】:Why did not redirect to view in ASP.NET MVC 4为什么没有重定向到在 ASP.NET MVC 4 中查看
【发布时间】:2012-10-11 07:37:04
【问题描述】:

所有,我有一个保存发布文件的控制器(请查看下面的代码)。完成它大约需要20-30分钟。但我保存文件后发现,RedirectToAction 不起作用。显示的 IE 状态栏:

Waiting for http://......./index.

顺便说一句,我的会话状态存储在 SQL Server 中。超时时间为 300 分钟。我不确定这个问题是否与我之前发布的here 的 IIS 7 应用程序池空闲时间有关。 虽然它没有重定向到操作,但我发现会话仍然存在。 文件和记录已成功保存。唯一的问题是它没有重定向。 请帮助我。谢谢。

[HttpPost]
[AcceptButton("Upload")]
public ActionResult Upload(UploadPackageModel model)
{
    //after about 20-30 min for 160MB file-upload, runs here.
    DeployLogModel tempLog = null;
    try
    {
        if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
        {
            var file = Request.Files[0];
            var fileName = Path.GetFileName(file.FileName);
            string sUploadFullPath = string.Empty;
            model.ID = Guid.NewGuid();//PK id of Uploaded Package
            string sUploadFileName = model.ID + Path.GetExtension(file.FileName);
            model.CreatedBy = DataHelp.LoginAdministrator.ID.ToString();
            model.LastUpdatedBy = DataHelp.LoginAdministrator.ID.ToString();
            model.PackageSize = Request.Files[0].ContentLength;
            model.CreatedDate = DateTime.UtcNow;
            model.LastUpdatedDate = DateTime.UtcNow;
            model.PackageName = fileName;

            string rootPath = AppDomain.CurrentDomain.BaseDirectory + "\\" + "DeployPackages\\";

            sUploadFullPath = Path.Combine(rootPath, sUploadFileName);
            model.PackagePath = sUploadFullPath;
            if (!Directory.Exists(rootPath))
                Directory.CreateDirectory(rootPath);

            file.SaveAs(sUploadFullPath);//Save the uploaded package.
            model.SavePackInfoIntoDB(model);//Save record to DB
        }
    }
    catch (Exception ex)
    {
        Log.Write("-Upload-Package-failed-:\r\n" + ex.Message + "\r\n" + ex.StackTrace);
    }
    return RedirectToAction("Index");//does not work.
}

文件和记录保存成功。唯一的问题是它没有重定向。

更新:

Web.config httpRuntime 设置为:

<httpRuntime executionTimeout="14400" maxRequestLength="716800" />

编辑添加索引操作代码:

public ActionResult Index(int? page)
{
        var db = DbContextHelper.CreateInstance();

        //Find all uploaded packages.
        var packages = db.DeployPackages.OrderByDescending(x => x.CreatedDate).Select(x => new PackageModel
             {
                 PackageId = x.ID,
                 UploadedBy = x.CreatedBy,
                 Description = x.Description,
                 PackageName = x.PackageName,
                 PackageSize = x.PackageSize,
                 PackagePath = x.PackagePath,
                 UploadTime = x.CreatedDate,
                 VersionName = x.VersionName
             }).ToList();

        int pageSize = ConfigHelper.BigPageSizeNum;
        int pageNumber = (page ?? 1);
        return View(packages.ToPagedList(pageNumber, pageSize));
    }

已编辑以添加 Fiddler 跟踪信息

result protocol Host                 Url          

200    http     test.cloudapp.net    /package/upload
200    http     test.cloudapp.net    /package/index

我可以在提琴手中看到/package/index 的响应 html 内容,但浏览器只是冻结在同一页面上(/package/upload)。

我想知道是否有办法用js代码更改windows.location.href,我的想法是成功完成上传操作。然后向客户端输出一些脚本,例如经典 asp.net 页面中的 response.write 脚本。 js 更改 windows.location.href 以重定向到/package/index。有没有办法在 ASP.NET MVC4 中实现它?

【问题讨论】:

  • 看起来有很多日志记录——你的日志显示了什么?
  • 对不起,请忘记那些日志。我已经更新了上面的代码,谢谢
  • 文件和记录保存成功。唯一的问题是它没有重定向。
  • 即使我将 IIS 7 应用程序池空闲超时时间更改为 300,问题仍然存在。似乎问题与此无关。谢谢。
  • 也许这会有所帮助:stackoverflow.com/questions/3829202/…

标签: c# .net file-upload asp.net-mvc-4


【解决方案1】:

使用Content(sResultScript, "text/html") 输出javascript 来重定向索引url。 IE8 显示失败页面,chrome 和 Firefox 正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多