Reputation: 41
I'm trying to save data from my view to my Db but my controller is not receiving the data from the view.
If I inspect the package under the "Network" tab in chrome it is sending the POST with the correct values, but in debugging I can see that the model the controller is receiving is empty
My Controller:
public class EventController : Controller
{
private ApplicationDbContext _context;
public EventController()
{
_context = new ApplicationDbContext();
}
[HttpPost]
public ActionResult Save(Event walkEvent)
{
_context.Event.Add(walkEvent);
_context.SaveChanges();
return RedirectToAction("Index", "Home");
}
}
My view:
@model Doggie.ViewModels.EventViewModel
@{
ViewBag.Title = "Index";
}
@using (@Html.BeginForm("Save", "Event"))
{
<div class="form-group">
@Html.LabelFor(e => e.Event.DogOwnerName)
@Html.ValidationMessageFor(e => e.Event.DogOwnerName)
@Html.TextBoxFor(e => e.Event.DogOwnerName, new {@class = "form-control"})
</div>
<div class="form-group">
@Html.LabelFor(e => e.Event.Location.Name)
@Html.ValidationMessageFor(e => e.Event.Location.Name)
@Html.DropDownListFor(e => e.Event.LocationId, new SelectList(Model.Location, "Id", "Name"), "Select Location", new {@class = "form-control"})
</div>
<div class="form-group">
@Html.LabelFor(e => e.Event.Date)
@Html.ValidationMessageFor(e => e.Event.Date)
@Html.EditorFor(e => e.Event.Date, new {htmlAttributes = new {@class = "form-control", @placeholder = "dd/mm/yyyy"}})
</div>
<div class="form-group">
@Html.LabelFor(e => e.Event.StartingTime)
@Html.ValidationMessageFor(e => e.Event.StartingTime)
@Html.TextBoxFor(e => e.Event.StartingTime, new { @class = "form-control", @placeholder="hh:mm" })
</div>
<div class="form-group">
@Html.LabelFor(e => e.Event.EstimatedTimeMinutes)
@Html.ValidationMessageFor(e => e.Event.EstimatedTimeMinutes)
@Html.TextBoxFor(e => e.Event.EstimatedTimeMinutes, new { @class = "form-control", @placeholder="In minutes" })
</div>
<div class="form-group">
@Html.LabelFor(e => e.Event.Comment)
@Html.ValidationMessageFor(e => e.Event.Comment)
@Html.TextAreaFor(e => e.Event.Comment, new { @class = "form-control"})
</div>
@Html.HiddenFor(e => e.Event.Id)
<button type="submit" class="btn btn-primary">Save</button>
}
My EventViewModel:
public class EventViewModel
{
public IEnumerable<Location> Location { get; set; }
public Event Event { get; set; }
}
Upvotes: 1
Views: 403
Reputation: 32069
Replace Event
with EventViewModel
in your Save
post method parameter.
[HttpPost]
public ActionResult Save(EventViewModel walkEvent)
{
_context.Event.Add(walkEvent.Event); // <-- Here add `Event` from `walkEvent`
_context.SaveChanges();
return RedirectToAction("Index", "Home");
}
Upvotes: 2