2014-12-05 139 views
0

我使用MVC5。我有一些使用HttpPostedFileBase上傳文件的問題。我有一個表單,我可以從我的磁盤中選擇一個文件並鍵入一些關於它的信息(在文本框中)。當我提交表格時,控制器動作被調用。在這個動作中,我打開文件並檢查它是否有一些特定的數據(與文本框中的數據相關)。所以我在這裏做一些驗證。我不能用JQuery來做 - 它很複雜。服務器端驗證是唯一的選擇。最後,如果驗證失敗,我將模型(包含文件)返回到視圖,但在此之後,文件字段旁邊出現驗證錯誤,但文件字段爲空。我讀過這很難將文件返回到視圖。我不想使用ajax來上傳文件。我想簡單地做。如果你有一篇能夠提供幫助的文章,請與我分享。自定義驗證的HttpPostedFileBase

我該如何解決我的問題?

+0

這很簡單,使用Ajax解決。使用該方法有什麼問題? – Shoe 2014-12-05 20:13:07

回答

0

我知道你提到不使用AJAX做文件上傳,但我認爲這個解決方案是一個非常簡單的。

使用下面的jQuery插件(https://blueimp.github.io/jQuery-File-Upload/),您可以自動執行該過程,並且如果文件中存在任何驗證問題,則可以返回以下模型並返回錯誤。

string errors = "Errors returned from complex logic"; 
if (!String.IsNullOrEmpty(errors)) 
{ 
    // error response 
    status = new ViewDataUploadFilesResult() 
    { 
     name = Path.GetFileName(hpf.FileName), 
     size = hpf.ContentLength, 
     error = errors 
    }; 
} 

這裏需要的是jQuery的文件上傳文檔相匹配的響應類:https://github.com/blueimp/jQuery-File-Upload/wiki/Setup

public class ViewDataUploadFilesResult 
{ 
    public string name { get; set; } 
    public int size { get; set; } 
    public string type { get; set; } 
    public string url { get; set; } 
    public string error { get; set; } 
} 

如果我理解正確,因爲文件已在用戶的計算機上,你只需要將文件關聯到他們正嘗試上傳的當前文件以返回錯誤。並且爲了使它們不必重新選擇要上傳的文件。我沒有看到任何其他理由需要將實際文件返回給用戶,因爲他們已經有了他們正在上傳的文件。