我有一个带有简单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>
请帮帮我 :(
作为此文档:
输入的标记辅助产生适当的
name
和id
基于属性值PageModel属性分配给它
在代码中,应该asp-for
为所有输入添加。在传递的viewModel中,您只有一个属性的数据类型为,User
并且不能直接访问这些User
属性,因此您应该通过调用NewUser.Name
and ... 访问它们,因此您的视图将如下所示:
@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>
祝好运。
不。它不起作用:(
是您的动作方法吗?
是。当我调试时,它开始起作用。正如我提到的,当我使用User type而不是 UsersViewModel时,它运行良好。
阿罕巴巴,我更新了答案
您的ViewModel只是
User
..而对'Name','LastName'和...一无所知