2011-11-08 64 views
1

我初學MVC3和仍然在學習。我試着寫一個應用程序(MVC3剃刀),它允許用戶選擇文件並上傳/保存。在上傳/保存過程中,我只想將「等待」文本顯示爲部分視圖。由於局部視圖只要Web應用程序已啓動,我從HomeController中遇到錯誤加載我有問題 - [HTtpPost] wait方法,因爲它不能跟蹤列表文件中對象的工作。當然,上傳後會填寫文件列表。我不知道如何解決這個問題,需要你的幫助。先謝謝你。MVC3剃刀:如何讓有條件加載的局部視圖?

HomeController.cs

public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> attachments) 
    { 
     foreach (var file in attachments) 
     { 
      // do something 
     } 
     return RedirectToAction("Wait"); 
    } 

    public ActionResult Wait() 
    { 
      // do something 
      ViewBag.Message = "Wait..."; 
      return View(); 
    } 

    [HttpPost] 
    public ActionResult Wait(FormCollection formCollection) 
    { 
     Work job = MvcApplication.GetWork(); 
     if (job.Files.Any()) 
     { 
      return RedirectToAction("SubmitWork"); 
     } 
     else 
     { 
      return View(); 
     } 
    } 

視圖Index.cshtml

@{ 
ViewBag.Title = "FirstTry"; 
} 
<p> 
<div id="AddFiles"> 
    @Html.Partial("_AddFiles") 
</div> 
</p> 

<div id ="Wait"> 
    @Html.Partial("_Wait") 
</div> 

局部視圖_Wait.cshtml

@{ 
ViewBag.Title = "Wait..."; 
} 
@ViewBag.Message 
@using (Html.BeginForm("Wait", "Home", FormMethod.Post, new 
{ 
    id = "waitform" 
})) 
{ 
} 
<script type="text/javascript"> 
    window.setTimeout("document.getElementById('waitform').submit()", 1000); 
</script> 

局部視圖_AddFiles.cshtml

@using (Html.BeginForm("UploadFile", "Home", FormMethod.Post, new{id = "uploadForm", enctype = "multipart/form-data"})) 
{ 
    @(Html.Telerik().Upload().Name("attachments").Multiple(true) 
     .Async(async => async.AutoUpload(true)) 
    ) 

    <input type="submit" value="Send" class="t-button" /> 
    <input type="reset" value="Reset" class="t-button" /> 
} 

回答

1

MVC不喜歡的WebForms工作,客戶端事件不會傳播到服務器控件(真的有甚至沒有控制,我覺得Telerik的模糊這條線並且使MVC體驗複雜化)。

您可以在您的控制器中調用其他操作來下載HTML或JSON或其他東西,但客戶端上交換HTML而不更改頁面(因爲上傳正在進行)的唯一方法是使用javascript。

我不熟悉這個Telerik的控制,但我認爲你將不得不做一些在客戶端,而不是在服務器端,以指示加載進度或顯示微調。

他們的API顯示有一個onupload事件時,可以監聽並可能交換到裝載格:

http://www.telerik.com/help/aspnet-mvc/telerik-ui-components-upload-client-api-and-events.html

他們可能有一個樣品的地方。我會看看我能挖東西了,但我真的覺得只是聽此事件是你最好的選擇,併爲此在客戶端,而不是服務器端。