1

さて、私は理解できないようです。その後、(それはすべての後にローカルだ)私は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; 
      } 

     } 

    } 

:私は前にそのメソッドを使用したことがない、これは何の直接の答えではありませんが、多分そのよりよい解決策

おかげ

+0

デバッガを一時停止し、コールスタックを見て、何をしているのかを調べます。 – SLaks

+0

残念ながら、それはそれの秘密をあきらめていませんでした。スタックは利用できませんでした。新しい日と再起動後、コードは期待どおりに動作します。 Ho Hum。 – BenP

+0

スタックトレースはありませんでしたか?それは意味をなさない。 Just My Codeを無効にしましたか? – SLaks

答えて

2

( "uploadbox")ここで

は、ビュー内のコードである/共有/ EditorTemplates/UploadField.cshtml

@Html.TextBox("",null,new{type="File"}) 
ファイルが変更されなかった場合には、アイテムを編集するときに、コードここ

public ActionResult AddFiles(FormCollection form, SomeModel myModel) 
    { 
     UploadFiles(form,"products", true); 
     myModel.pdfFile = form["pdffile"]; 
     myModel.thumbnail = form["thumbnail"]; 

されるが、他の項目はちょうど

var existingFile = ctx2.modelname.SingleOrDefault(x => x.Id == id).Filename; 
     NameValueCollection myCol = new NameValueCollection(); 
     myCol.Add("Filename", existingFile); 
     UploadFiles(form, myCol, "uploads/custom", true); 

     myModel.Filename = form["Filename"]; 

を持っている:ここ

は、アップロード機能の使用方法の一例です考え:-)

+0

私は最初にモデルベースのアプローチを探していましたが、例は見つかりませんでした。私の元の問題は一晩で不思議に消えてしまったので、これを答えとしてマークします。ありがとう – BenP

関連する問題