System.Web.HttpPostedFileBase не содержит определения для HasFile и не имеет метода расширения HasFile. - PullRequest
2 голосов
/ 18 апреля 2011

Я следую 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 'может быть найдено (вам не хватает директивы using или ссылки на сборку?)

Я искал в 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);
    }
 }
 }

в папке Helpers У меня есть класс Helper.

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;
    }
}

1 Ответ

5 голосов
/ 18 апреля 2011

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

using MvcApplication1.Models;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...