温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - How to pass form data to ViewModel Properties?
asp.net asp.net-core-2.0 asp.net-mvc c# html

c# - 如何将表单数据传递给ViewModel属性?

发布于 2020-04-26 18:15:02

我有一个带有简单UI .net core 2代码。
我想将数据从表单传递到控制器中接受ViewModel参数的操作方法(我必须使用View Model),但是当我提交表单时,结果为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>

请帮帮我 :(

查看更多

提问者
Ali Abbasifard
被浏览
25
Hamed Moghadasi 2020-02-10 04:02

作为此文档

输入的标记辅助产生适当的nameid基于属性值PageModel属性分配给它

在代码中,应该asp-for为所有输入添加在传递的viewModel中,您只有一个属性的数据类型为,User并且不能直接访问这些User属性,因此您应该通过调用NewUser.Nameand ... 访问它们,因此您的视图将如下所示:

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

祝好运。