Как передать данные формы в свойства ViewModel? - PullRequest
1 голос
/ 09 февраля 2020

У меня есть код . net core 2 с простым пользовательским интерфейсом.
Я хочу передать данные из моей формы в метод действия в моем контроллере, который принимает параметр ViewModel (я должен использовать модель представления) Но когда я отправляю свою форму, я получаю null в результате. Когда я использую Пользователь в качестве типа параметра, все в порядке. это мой кодекс

Моя модель

 public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
    }

Моя модель просмотра

public class UsersViewModel
    {
        public User NewUser { get; set; }
    }

Мое действие

[HttpPost]
public IActionResult Index(UsersViewModel user)
  {
      UserDbContext context = new UserDbContext();
      context.Users.Add(user);
      context.SaveChanges();
      return View();
  }

И мой взгляд

@model EFCore2.ViewModels.UsersViewModel


<form asp-controller="Home" asp-action="index" method="post">
    <input name="Name" />
    <input name="LastName" />
    <input name="Age" />
    <br />
    <input type="submit" value="Ok" />
</form>

Помогите мне, пожалуйста: (

1 Ответ

3 голосов
/ 09 февраля 2020

Как это do c:

Помощник тега Input генерирует соответствующие значения атрибутов name и id на основе PageModel свойство, которое ему присвоено

В вашем коде вы должны добавить asp-for для всех ваших входных данных. и в переданной viewModel у вас есть только одно свойство с типом данных User и у вас нет прямого доступа к свойствам User, поэтому вы должны получить к ним доступ, вызвав NewUser.Name и ... так что ваше представление будет как показано ниже:

@model EFCore2.ViewModels.UsersViewModel


<form asp-controller="Home" asp-action="index" method="post">
    <input asp-for="NewUser.Name" name="Name" />
    <input asp-for="NewUser.LastName"  name="LastName" />
    <input asp-for="NewUser.Age"  name="Age" />
    <br />
    <input type="submit" value="Ok" />
</form>

удачи.

...