Asp.net核心剃须刀页面无法从csHTML获取值到C#
客户模型Asp.net核心剃须刀页面无法从csHTML获取值到C#,c#,asp.net-core,asp.net-core-razor-pages,C#,Asp.net Core,Asp.net Core Razor Pages,客户模型 public class CustomerModel { [Required] public string FirstName { get; set; } [Required] public string LastName { get; set; } [Required] public string Contact { get; set; } [Required] public int Notification
public class CustomerModel
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public string Contact { get; set; }
[Required]
public int Notifications { get; set; }
[Required]
public int InfoCollect { get; set; }
[Required]
public string Email { get; set; }
public UserModel User { get; set; }
}
用户模型类
public class UserModel
{
[Key]
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
[Required]
public string AccountType { get; set; }
}
}
public class RegisterModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
private readonly OnlineFoodOrderingWebApplication.Data.OnlineFoodOrderingWebApplicationContext _context;
public RegisterModel(OnlineFoodOrderingWebApplication.Data.OnlineFoodOrderingWebApplicationContext context, ILogger<IndexModel> logger)
{
_context = context;
_logger = logger;
}
public void OnGet()
{
}
public IActionResult Create()
{
return Page();
}
[BindProperty]
public CustomerModel Customer { get; set; }
[BindProperty]
public UserModel NewUser { get; set; }
public IActionResult OnPost()
{
if (ModelState.IsValid == false)
{
NewUser.AccountType = "Customer";
ModelState.AddModelError("Error", "This is Error"+ NewUser.AccountType+ NewUser.Password+Customer.LastName);
return Page();
}
Customer.Notifications = 1;
Customer.InfoCollect = 1;
_context.NewUser.Add(NewUser);
return RedirectToPage("/Index");
}
}
数据上下文
public class OnlineFoodOrderingWebApplicationContext : DbContext
{
public OnlineFoodOrderingWebApplicationContext (DbContextOptions<OnlineFoodOrderingWebApplicationContext> options)
: base(options)
{
}
public DbSet<OnlineFoodOrderingWebApplication.Models.UserModel> NewUser { get; set; }
public DbSet<OnlineFoodOrderingWebApplication.Models.CustomerModel> Customer { get; set; }
public DbSet<OnlineFoodOrderingWebApplication.Models.StaffModel> Staff { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<CustomerModel>(eb =>
{
eb.HasNoKey();
});
modelBuilder
.Entity<StaffModel>(eb =>
{
eb.HasNoKey();
});
}
}
公共类OnlineFoodOrderingWebApplicationContext:DbContext
{
公共联机FoodOrderingWebApplicationContext(DbContextOptions选项)
:基本(选项)
{
}
公共DbSet NewUser{get;set;}
公共数据库集客户{get;set;}
公共DbSet Staff{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
建模者
.实体(eb=>
{
eb.HasNoKey();
});
建模者
.实体(eb=>
{
eb.HasNoKey();
});
}
}
注册页面HTML
<div class="form-group">
<div class="form-row">
<div class="col-md-6">
<div class="form-label-group">
<input name="firstName" type="text" class="form-control" placeholder="First name" required="required" asp-for="Customer.FirstName" />
<label for="firstName">First name</label>
</div>
</div>
<div class="col-md-6">
<div class="form-label-group">
<input type="text" name="lastName" class="form-control" placeholder="Last name" required="required" asp-for="Customer.LastName" />
<label for="lastName">Last name</label>
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label-group">
<input type="email" name="inputEmail" class="form-control" placeholder="Email address" required="required" asp-for="NewUser.Email" />
<label for="inputEmail">Email address</label>
</div>
</div>
<div class="form-group">
<div class="form-label-group">
<input type="text" name="inputContact" asp-for="Customer.Contact" class="form-control" placeholder="Contact Number" required="required" />
<label for="inputContact">Contact Number</label>
</div>
</div>
<div class="form-group">
<div class="form-row">
<div class="col-md-6">
<div class="form-label-group">
<input type="password" name="inputPassword" asp-for="NewUser.Password" class="form-control" placeholder="Password" required="required" />
<label for="inputPassword">Password</label>
</div>
</div>
<div class="col-md-6">
<div class="form-label-group">
<input type="password" name="confirmPassword" class="form-control" placeholder="Confirm password" required="required" />
<label for="confirmPassword">Confirm password</label>
</div>
</div>
</div>
</div>
@if (!ViewData.ModelState.IsValid && ViewData.ModelState["Error"].Errors.Count > 0)
{
<div class="alert alert-
<strong>Error!</strong> danger">@ViewData.ModelState["Error"].Errors.First().ErrorMessage
</div>
}
<button class="btn btn-primary btn-block" type="submit"> Send Message</button>
名字
姓
电子邮件地址
联系电话
密码
确认密码
@如果(!ViewData.ModelState.IsValid&&ViewData.ModelState[“Error”].Errors.Count>0)
{
@ViewData.ModelState[“错误”].Errors.First().ErrorMessage
}
发送消息
注册页面html.cs
public class UserModel
{
[Key]
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
[Required]
public string AccountType { get; set; }
}
}
public class RegisterModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
private readonly OnlineFoodOrderingWebApplication.Data.OnlineFoodOrderingWebApplicationContext _context;
public RegisterModel(OnlineFoodOrderingWebApplication.Data.OnlineFoodOrderingWebApplicationContext context, ILogger<IndexModel> logger)
{
_context = context;
_logger = logger;
}
public void OnGet()
{
}
public IActionResult Create()
{
return Page();
}
[BindProperty]
public CustomerModel Customer { get; set; }
[BindProperty]
public UserModel NewUser { get; set; }
public IActionResult OnPost()
{
if (ModelState.IsValid == false)
{
NewUser.AccountType = "Customer";
ModelState.AddModelError("Error", "This is Error"+ NewUser.AccountType+ NewUser.Password+Customer.LastName);
return Page();
}
Customer.Notifications = 1;
Customer.InfoCollect = 1;
_context.NewUser.Add(NewUser);
return RedirectToPage("/Index");
}
}
公共类注册表模型:PageModel
{
专用只读ILogger\u记录器;
私有只读OnlineFoodOrderingWebApplication.Data.OnlineFoodOrderingWebApplicationContext\u上下文;
公共注册表模型(OnlineFoodOrderingWebApplication.Data.OnlineFoodOrderingWebApplicationContext上下文,ILogger记录器)
{
_上下文=上下文;
_记录器=记录器;
}
公共互联网
{
}
public IActionResult Create()
{
返回页();
}
[BindProperty]
公共CustomerModel客户{get;set;}
[BindProperty]
公共用户模型NewUser{get;set;}
public IActionResult OnPost()
{
if(ModelState.IsValid==false)
{
NewUser.AccountType=“客户”;
AddModelError(“错误”,“这是错误”+NewUser.AccountType+NewUser.Password+Customer.LastName);
返回页();
}
客户通知=1;
Customer.InfoCollect=1;
_context.NewUser.Add(NewUser);
返回重定向Topage(“/索引”);
}
}
有一个bug,我无法从OnPost方法的html输入中获取“NewUser”数据。
然而,这似乎与“Customer”相同,但是“Customer”工作得很好,能够从输入中获取数据。为了让您的
OnPost
方法捕获html输入参数,您必须将它们包装在表单
标记中。因此,您的注册页面Html必须如下所示:
<form method="post">
<div class="form-group">
<div class="form-row">
<div class="col-md-6">
<div class="form-label-group">
<input name="firstName" type="text" class="form-control" placeholder="First name" required="required" asp-for="Customer.FirstName" />
<label for="firstName">First name</label>
</div>
</div>
<div class="col-md-6">
<div class="form-label-group">
<input type="text" name="lastName" class="form-control" placeholder="Last name" required="required" asp-for="Customer.LastName" />
<label for="lastName">Last name</label>
</div>
</div>
</div>
</div>
<div class="form-group">
<div class="form-label-group">
<input type="email" name="inputEmail" class="form-control" placeholder="Email address" required="required" asp-for="NewUser.Email" />
<label for="inputEmail">Email address</label>
</div>
</div>
<div class="form-group">
<div class="form-label-group">
<input type="text" name="inputContact" asp-for="Customer.Contact" class="form-control" placeholder="Contact Number" required="required" />
<label for="inputContact">Contact Number</label>
</div>
</div>
<div class="form-group">
<div class="form-row">
<div class="col-md-6">
<div class="form-label-group">
<input type="password" name="inputPassword" asp-for="NewUser.Password" class="form-control" placeholder="Password" required="required" />
<label for="inputPassword">Password</label>
</div>
</div>
<div class="col-md-6">
<div class="form-label-group">
<input type="password" name="confirmPassword" class="form-control" placeholder="Confirm password" required="required" />
<label for="confirmPassword">Confirm password</label>
</div>
</div>
</div>
</div>
@if (!ViewData.ModelState.IsValid && ViewData.ModelState["Error"].Errors.Count > 0)
{
<div class="alert alert-
<strong>Error!</strong> danger">@ViewData.ModelState["Error"].Errors.First().ErrorMessage
</div>
}
<button class="btn btn-primary btn-block" type="submit"> Send Message</button>
</form>
名字
姓
电子邮件地址
联系电话
密码
确认密码
@如果(!ViewData.ModelState.IsValid&&ViewData.ModelState[“Error”].Errors.Count>0)
{
@ViewData.ModelState[“错误”].Errors.First().ErrorMessage
}
发送消息
我认为您缺少在表单
标记中包装html输入模型。