C # - ASP.NET MVC Получить данные из формы в контроллер, я получаю пустой объект - PullRequest
0 голосов
/ 18 февраля 2019

Я не могу найти ответ в Интернете ...

У меня есть форма, где люди могут добавлять людей.Однако человек, которого я получаю из запроса на публикацию, пуст.

У моей модели personModel есть несколько свойств, Naam, Leeftijd и Hobbie.

В представлении «Создать» есть форма, созданная с помощью @ Html.LabelFor.

Модель:

public class PersoonModel
{
    public string Naam { get; private set; }
    public int Leeftijd { get; private set; }

    public string Hobbie { get; private set; }

    public PersoonModel(string naam,int leeftijd, string hobbie )
    {
        Naam = naam;
        Leeftijd = leeftijd;
        Hobbie = hobbie;
    }

    public PersoonModel()
    {

    }
}

Вид:

@using (Html.BeginForm("Create","Dashboard",FormMethod.Post))
{ 
  <fieldset>
    <legend>Persoon</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.Naam)
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(model => model.Naam)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Leeftijd)
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(model => model.Leeftijd)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Hobbie)
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(model => model.Hobbie)
    </div>
    <input type="submit" value="Create new Person"/>
  </fieldset>

Контроллер:

    [HttpGet]
    public ActionResult Create()
    {
        PersoonModel persoonModel = new PersoonModel();
        return View(persoonModel);
    }

    [HttpPost]
    public ActionResult Create(PersoonModel Persoon)
    {
        personen.Add(Persoon);
        return Redirect("/Dashboard");
    }

Не получается, чтобы макет был хорошstackoverflow, но я надеюсь, что вы понимаете это persoonmodel Persoon (в моем контроллере) пуст

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

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

Просто используйте это

Модель

public class PersonModel
{
public string Name { get; set; }
public int PID { get; set; }
public string Hobbie { get; set; }
}

Вид

// path to your personModel
@ApplicationName.ModelFolder.PersonModel 
@using (Html.BeginForm("Create","Dashboard",FormMethod.Post))
{ 
<fieldset>
<legend>Person</legend>

<div class="editor-label">
    @Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
    @Html.TextBoxFor(model => model.Name)
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.PID)
</div>
<div class="editor-field">
    @Html.TextBoxFor(model => model.PID)
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.Hobbie)
</div>
<div class="editor-field">
    @Html.TextBoxFor(model => model.Hobbie)
</div>
<input type="submit" value="Create new Person"/>
</fieldset>
}

иконтроллер

[HttpGet]
public ActionResult Create()
{
    PersonModel personModel = new PersonModel();
    return View(personModel);
}

[HttpPost]
public ActionResult Create(PersonModel model)
{
    personen.Add(model);
    return Redirect("/Dashboard");
}

Это должно получить значения функции post, если вы отлаживаете ее.

0 голосов
/ 18 февраля 2019

Проблема в том, что ваши сеттеры являются частными, а механизм связывания модели MVC не может заполнить частные значения:

public class PersoonModel
{
    // remove private before set
    public string Naam { get; set; }
    public int Leeftijd { get; set; }
    public string Hobbie { get; set; }

    // more code...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...