2011-04-18 2 views
2

Я следую http://www.mikesdotnetting.com/Article/125/ASP.NET-MVC-Uploading-and-Downloading-Files. Использование VS2010, ASP.NET 4.0, MVC3 в C# с ADO.NET в SQL Server 2008R2. Я получаю следующее сообщение об ошибке ...'System.Web.HttpPostedFileBase' не содержит определения для 'HasFile' и никакого метода расширения 'HasFile'

«System.Web.HttpPostedFileBase» не содержит определения для «HasFile» и никакого метода расширения «HasFile», принимающего первый аргумент типа «System.Web.HttpPostedFileBase», (вы не указали директиву использования или ссылку на сборку?)

Я искал в Stackflow, было что-то о включении System.Web.Abstractions. Я включил это, и я все еще получаю ошибку. Спасибо заранее, если кто-нибудь скажет мне решение.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.IO; 
using System.Data.SqlClient; 
using System.Web.Helpers; 

namespace MvcApplication1.Controllers 
{ 
    public class MyController : Controller 
    { 

    // 
    // GET: /My/ 

    public ActionResult Index() 
    { 
     foreach (string upload in Request.Files) 
     { 
      if (!Request.Files[upload].HasFile()) continue; 

      string mimeType = Request.Files[upload].ContentType; 
      Stream fileStream = Request.Files[upload].InputStream; 
      string fileName = Path.GetFileName(Request.Files[upload].FileName); 
      int fileLength = Request.Files[upload].ContentLength; 
      byte[] fileData = new byte[fileLength]; 
      fileStream.Read(fileData, 0, fileLength); 

      const string connect = @"Server=.\SQLExpress;Database=FileTest;Trusted_Connection=True;"; 
      using (var conn = new SqlConnection(connect)) 
      { 
       var qry = "INSERT INTO FileStore (FileContent, MimeType, FileName) VALUES (@FileContent, @MimeType, @FileName)"; 
       var cmd = new SqlCommand(qry, conn); 
       cmd.Parameters.AddWithValue("@FileContent", fileData); 
       cmd.Parameters.AddWithValue("@MimeType", mimeType); 
       cmd.Parameters.AddWithValue("@FileName", fileName); 
       conn.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
     } 
     return View(); 
    } 

    public FileContentResult GetFile(int id) 
    { 
     SqlDataReader rdr; byte[] fileContent = null; 
     string mimeType = ""; string fileName = ""; 
     const string connect = @"Server=.\SQLExpress;Database=FileTest;Trusted_Connection=True;"; 

     using (var conn = new SqlConnection(connect)) 
     { 
      var qry = "SELECT FileContent, MimeType, FileName FROM FileStore WHERE ID = @ID"; 
      var cmd = new SqlCommand(qry, conn); 
      cmd.Parameters.AddWithValue("@ID", id); 
      conn.Open(); 
      rdr = cmd.ExecuteReader(); 
      if (rdr.HasRows) 
      { 
       rdr.Read(); 
       fileContent = (byte[])rdr["FileContent"]; 
       mimeType = rdr["MimeType"].ToString(); 
       fileName = rdr["FileName"].ToString(); 
      } 
     } 
     return File(fileContent, mimeType, fileName); 
    } 
} 
} 

В папке «Помощники» у меня есть класс «Помощник».

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace MvcApplication1.Models 
{ 
public static class Helper 
{ 

    public static bool HasFile(this HttpPostedFileBase file) 
    { 
     return (file != null && file.ContentLength > 0) ? true : false; 
    } 
} 

ответ

5

Вы должны добавить, используя заявление в свой файл кода MyController, так как это то, что требуется, если вы хотите использовать метод расширения (это должно быть в рамках):

using MvcApplication1.Models; 
+0

Благодарим за быстрый ответ – DiscoDude

Смежные вопросы