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输入模型。