1

すべて、投稿されたファイルを保存したコントローラーがあります(以下のコードを確認してください)。完了するまでに約20〜30分かかりました。しかし、ファイルを保存した後、RedirectToAction が機能しないことがわかりました。表示される IE ステータス バー:

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

ところで、私のセッション状態は SQL Server に保存されます。タイムアウトは 300 分です。以前ここに投稿した 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

のフィドラーで応答の html コンテンツを確認できます/package/indexが、ブラウザは同じ page( /package/upload) でフリーズするだけです。

windows.location.href を js コードで変更する方法があるかどうか疑問に思いました。私の考えは、アップロード アクションが正常に終了したときです。次に、従来のasp.netページのresponse.writeスクリプトのようなスクリプトをクライアントに出力します。js は、windows.location.href を にリダイレクトするように変更し/package/indexます。ASP.NET MVC4 で作成する方法はありますか?

4

1 に答える 1

0

Content(sResultScript, "text/html")インデックス URL をリダイレクトするために JavaScript を出力するために使用します。IE8 では失敗したページが表示されましたが、chrome と Firefox は問題ありません。

于 2012-11-01T03:54:19.127 に答える