Вот метод действия контроллера, который я должен загрузить изображение профиля пользователя ...
[HttpPost]
public ActionResult UploadPhoto(int id, FormCollection form)
{
Profile profile = db.Profiles.Find(id);
var file = Request.Files[0];
if (file.ContentLength > 512000)
{
ModelState.AddModelError(string.Empty, "Please limit your photo to 500 KB");
}
bool IsJpeg = file.ContentType == "image/jpeg";
bool IsPng = file.ContentType == "image/png";
bool IsGif = file.ContentType == "image/gif";
if (!IsJpeg && !IsPng && !IsGif)
{
ModelState.AddModelError(string.Empty, "Only .jpeg, .gif, and .png images allowed");
}
if (file == null || file.ContentLength <= 0)
{
ModelState.AddModelError(string.Empty, "You must select an image to upload");
}
if (ModelState.IsValid)
{
try
{
string newFile = Path.GetFileName(file.FileName);
file.SaveAs(Server.MapPath("/Content/users/" + User.Identity.Name + "/" + newFile));
profile.ProfilePhotoPath = "/Content/users/" + User.Identity.Name + "/" + newFile;
UpdateModel(profile);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
return View();
}
Когда я пытаюсь загрузить изображение и пройти через него ...
Когда приложение попадает в эту строку:
profile.ProfilePhotoPath = "/Content/users/" + User.Identity.Name + "/" + newFile;
Показывает значение ProfilePhotoPath как «System.Web.HttpPostedFileWrapper»
Теперь, когда приложение выполняет следующую строку:
UpdateModel(profile);
Он показывает значение ProfilePhotoPath как "/Content/users/WebWired/myprofilepic.png", как и должно быть ...
Но тогда, когда приложение достигает следующей строки:
db.SaveChanges();
Внезапно значение ProfilePhotoPath снова становится "System.Web.HttpPostedFileWrapper" ... и так оно и сохраняется ...
Если это не достаточно странно, оноработал до того, как я начал добавлять логику к загрузке файла, но это действительно не должно иметь к этому никакого отношения, потому что оно передает все это ...
Кто-нибудь понимает, что здесь происходит, почемуон делает это, я делаю что-то не так?