MVC .net Controller не получает данные POST из представления - PullRequest
1 голос
/ 14 марта 2019

Я пытаюсь сохранить данные из моего представления в моей базе данных но мой контроллер не получает данные из представления.

Если я проверяю пакет на вкладке «Сеть» в Chrome, он отправляет сообщение POST с правильными значениями, но при отладке я вижу, что модель, которую получает контроллер, пуста

Мой контроллер:

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

Мой взгляд:

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

Моя EventViewModel:

public class EventViewModel
{
    public IEnumerable<Location> Location { get; set; }
    public Event Event { get; set; }
}

1 Ответ

2 голосов
/ 14 марта 2019

Замените Event на EventViewModel в параметре Save метода записи.

[HttpPost]
public ActionResult Save(EventViewModel walkEvent)
{
    _context.Event.Add(walkEvent.Event); // <-- Here add `Event` from `walkEvent`
    _context.SaveChanges();
    return RedirectToAction("Index", "Home");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...