MVC试图上传文件时出错

时间:2009-04-17 05:27:58

标签: asp.net-mvc

我已使用Google搜索此代码来上传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 个答案:

答案 0 :(得分: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

更轻松地实现您的上传结构。我已经习惯了,并没有遇到任何问题。

答案 1 :(得分:0)

This answer可能有所帮助。此外,我建议不要使用上传文件发布其他表单字段..在单独的操作中单独执行此操作。当然,这给用户提供了两个步骤,但请相信我,你的结构非常简单。