2009-04-17 66 views
0

我已经使用此代码来上传带有MVC的文件。试图上传文件的MVC问题

<form method="post" enctype="multipart/form-data" action="/Task/SaveFile"> 
<input type="file" id="FileBlob" name="FileBlob"/> 
<input type="submit" value="Save"/> 
<input type="button" value="Cancel" onclick="window.location.href='/'" /> 
</form> 

但是,当询问形式[“FileBlob”]是空当我浏览一个文件,并提交表单????

马尔科姆

编辑:我添加了一个文本框的形式,我可以得到该值的罚款。只是输入类型文件不工作?

bool errors = false; 
    //this field is never empty, it contains the selected filename 
    if (string.IsNullOrEmpty(forms["FileBlob"])) 
    { 
     errors = true; 
     ModelState.AddModelError("FileBlob", "Please upload a file"); 
    } 
    else 
    { 
     string sFileName = forms["FileBlob"]; 
     var file = Request.Files["FileBlob"]; 
     //'file' is always null, and Request.Files.Count is always 0 ??? 
     if (file != null) 
     { 
     byte[] buf = new byte[file.ContentLength]; 
     file.InputStream.Read(buf, 0, file.ContentLength); 
     //do stuff with the bytes 
     } 
     else 
     { 
     errors = true; 
     ModelState.AddModelError("FileBlob", "Please upload a file"); 
     } 
    } 
    if (errors) 
    { 
     return ShowTheFormAgainResult(); 
    } 
    else 
    { 
     return View(); 
    } 
} 

回答

2

哇这是一个混乱的设置,我个人绝不会之类的东西与所有这些if语句和空值通过jQuery验证你也可以做服务器端验证复杂化。而不是检查if(errors)if(ModelState.IsValid){ return View();}这里是一个更好的诠释

http://msdn.microsoft.com/en-us/library/dd410404.aspx

这样就可以摆脱布尔设置的。

也检查这里

http://blogs.msdn.com/stcheng/archive/2009/03/20/asp-net-how-to-implement-file-upload-and-download-in-asp-net-mvc.aspx

您上传结构的更容易实行。我用过它,没有遇到任何问题。

0

This answer可能会有所帮助。此外,我建议不要发布其他表单域与上传文件..分开做一个单独的行动。当然,这给用户2个步骤,但相信我这是值得你的目的简单。