さて、私は理解できないようです。その後、(それはすべての後にローカルだ)私は200キロバイト程度のファイルを送信するとMVC3 - 大きなファイルでHttpPostedFileBaseを使用すると、RedirectToActionが非常に遅い
@using (Html.BeginForm("CreateNewCourse", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(false)
<fieldset>
<legend>Course</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
Course Data File
</div>
<div class="editor-field">
<input type="file" name="CourseDataFile" id="CourseDataFile" />
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Visible)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Visible)
@Html.ValidationMessageFor(model => model.Visible)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
、それは十分に速く、サーバーにアップロードし、しかし:
のでpublic ActionResult Index()
{
return View(_courseService.ListAllCourses());
}
[HttpPost]
public ActionResult CreateNewCourse(CourseVDO course, HttpPostedFileBase CourseDataFile)
{
return RedirectToAction("Index");
}
とビュー:私はこのように、コントローラを持っています"Return View(_courseService.ListAllCourses());"の "return RedirectToAction(" Index ");"行からブレークポイントに戻るまでに5秒かかります。 ListAllCoursesを実際には実行しません。これは、それが内部の配管に完全にダウンしていることを意味します。さらに悪いことに、この遅延はファイルサイズに比例します。何が地球上で起こっているのですか、それをどうやって止めることができますか?私はUIHintを使用し、私のモデルアイテムでので、私はモデルを使用
// used when editing an item
public void UploadFiles(FormCollection form, NameValueCollection currentFiles, string folder, bool useTicks)
{
foreach (string file in Request.Files)
{
var hpf = Request.Files[file];
if (hpf.ContentLength == 0)
{
form[file] = currentFiles[file];
}
else
{
var filename = useTicks ? hpf.FileName
.Replace(" ", "_")
.Replace(".", RandomFileName() + ".") : hpf.FileName;
var myPath = Server.MapPath("~/Content/" + folder);
hpf.SaveAs(myPath + "/" + filename);
form[file] = filename;
}
}
if (Request.Files.Count > 0) return;
foreach (var file in currentFiles.AllKeys)
{
form[file] = currentFiles[file];
}
}
//used when creating a new item
public void UploadFiles(FormCollection form, string folder, bool useTicks)
{
foreach (string file in Request.Files)
{
var hpf = Request.Files[file];
if (hpf.ContentLength == 0)
{
form[file] = null;
}
else
{
var filename = "";
filename = useTicks ?
hpf.FileName.Replace(" ", "_").Replace(".", RandomFileName() + ".") :
hpf.FileName;
UploadFileName = filename;
var myPath = Server.MapPath("~/Content/" + folder);
hpf.SaveAs(myPath + "/" + filename);
form[file] = UploadFileName;
}
}
}
:私は前にそのメソッドを使用したことがない、これは何の直接の答えではありませんが、多分そのよりよい解決策
おかげ
デバッガを一時停止し、コールスタックを見て、何をしているのかを調べます。 – SLaks
残念ながら、それはそれの秘密をあきらめていませんでした。スタックは利用できませんでした。新しい日と再起動後、コードは期待どおりに動作します。 Ho Hum。 – BenP
スタックトレースはありませんでしたか?それは意味をなさない。 Just My Codeを無効にしましたか? – SLaks