Reputation:
I want set image to my post but I can't.all model field is fill but image field is null
my model class:
public class Game
{
public Game()
{
Platforms = new List<Platform>();
}
[Key]
public int GameID { get; set; }
public string Name { get; set; }
public string Image { get; set; }
[AllowHtml]
public string Description { get; set; }
public DateTime PublishDate { get; set; }
public virtual ICollection<Platform> Platforms { get; set; }
}
my controller class :
public ActionResult Create_post(Game model,int[] platformsIds)
{
if (ModelState.IsValid)
{
foreach (var pId in platformsIds)
{
var platform = _repository.Get<Platform>(pId);
model.Platforms.Add(platform);
}
_repository.Add<Game>(model);
return RedirectToAction("Index");
}
ViewBag.Platforms = _repository.GetAll<Platform>().ToList();
ViewBag.HtmlContent = model.Description;
return View(model);
}
thank you
Upvotes: 0
Views: 181
Reputation: 1532
you just check image url before save your model
in your view you must have this code
<div class="form-group">
@Html.LabelFor(model => model.Image, htmlAttributes: new { @class = "control-label col-md-1" })
<div class="col-md-4">
<div class="col-md-6 col-md-push-0">
<input type="file" class="form-control" name="ImageUrl" id="ImageUrl" />
</div>
@Html.ValidationMessageFor(model => model.Image, "", new { @class = "text-danger" })
</div>
</div>
in your controller you must change your code
public ActionResult Create_post(Game model,int[] platformsIds,HttpPostedFileBase ImageUrl)
{
if (ModelState.IsValid)
{
foreach (var pId in platformsIds)
{
var platform = _repository.Get<Platform>(pId);
model.Platforms.Add(platform);
}
if (ImageUrl != null && ImageUrl.ContentLength > 0)
{
var uploadDir = "~/images/Games/"; // your location for save images
string image = Guid.NewGuid().ToString() + ImageUrl.FileName;
var imagePath = Path.Combine(Server.MapPath(uploadDir),image);
ImageUrl.SaveAs(imagePath);
model.Image = image;
}
_repository.Add<Game>(model);
return RedirectToAction("Index");
}
ViewBag.Platforms = _repository.GetAll<Platform>().ToList();
ViewBag.HtmlContent = model.Description;
return View(model);
}
Upvotes: 3