У меня есть поле файла, которое должно использоваться для загрузки изображений и в то же время сохранять путь к файлу в базе данных. Я последовал за этим sample tutorial и адаптировал свой код. Ниже моя модельЗагрузка и сохранение файла в ASP.NET MVC4
using System;
using System.Web;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BOL
{
public class TeamValidation
{
[Key]
public int teamID { get; set; }
[Required(ErrorMessage = "Please Enter Your Team Name")]
[Display(Name = "Team Name")]
public string teamName { get; set; }
[DisplayName("Team Picture")]
[Required(ErrorMessage = "Please Upload Team Picture")]
[ValidateFile]
public HttpPostedFileBase teamPicture { get; set; }
//public string teamPicture { get; set; }
[Required]
[Display(Name = "Description")]
public string description { get; set; }
//[AllowHtml]
[Required(ErrorMessage = "Please Enter Team Content")]
[Display(Name = "Content")]
[MaxLength(200)]
public string content { get; set; }
}
//Customized data annotation validator for uploading file
public class ValidateFileAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
int MaxContentLength = 1024 * 1024 * 3; //3 MB
string[] AllowedFileExtensions = new string[] { ".jpg", ".gif", ".png" };
var file = value as HttpPostedFileBase;
if (file == null)
return false;
else if (!AllowedFileExtensions.Contains(file.FileName.Substring(file.FileName.LastIndexOf('.'))))
{
ErrorMessage = "Please upload Your Photo of type: " + string.Join(", ", AllowedFileExtensions);
return false;
}
else if (file.ContentLength > MaxContentLength)
{
ErrorMessage = "Your Photo is too large, maximum allowed size is : " + (MaxContentLength/1024).ToString() + "MB";
return false;
}
else
return true;
}
}
[MetadataType(typeof(TeamValidation))]
public partial class team
{
[Key]
public int teamID { get; set; }
public string teamName { get; set; }
public string teamPicture { get; set; }
public string description { get; set; }
public string content { get; set; }
}
}
и здесь является контроллером
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using BOL;
namespace TeamBuildingCompetition.Areas.Admin.Controllers
{
public class TeamController : BaseAdminController
{
// GET: Admin/Team
public ActionResult Index()
{
return View();
}
public ActionResult teamView()
{
var teamList = objBs.teamBs.GetALL();
return View(teamList);
}
[HttpPost]
public ActionResult Create(team objTeam)
{
try
{
if (ModelState.IsValid)
{
var fileName = Path.GetFileName(objTeam.teamPicture.FileName);
var path = Path.Combine(Server.MapPath("~/Content/Upload"), fileName);
objTeam.teamPicture.SaveAs(path);
TempData["Msg"] = "Created Successfully!";
objBs.teamBs.Insert(objTeam);
return RedirectToAction("Index");
}
else
{
return View("Index");
}
}
catch (Exception e1)
{
TempData["Msg"] = "Create Failed! :" + e1.Message;
return RedirectToAction("Index");
}
}
}
}
У меня есть ошибки в надреза ниже, так что я не смог запустить файл. Ниже волнистая линия ошибки от контроллера:
, а также волнистая линия в модели, как показано ниже:
На зависания над линиями волнистых, я имел это ошибка
Для TeamValidation.cs Ошибка генерирует класс для HttpPostedFileBase
В то время как ошибка на TeamController для волнистой линии .FileName является «строки» не содержит Defination для «FileName», а метод расширения «FileName» принимающего первый arguement типа «строки»
Включили ли вы 'using System.Web;'? –
@StephenMuecke Да ... Я включил систему System.Web и все еще не работает. – Guzzyman
Может видеть это в контроллере, но не в пространстве имен модели :) –