提问人:Unknown 提问时间:6/11/2023 最后编辑:marc_sUnknown 更新时间:6/11/2023 访问量:170
ASP.NET 核心页面处理程序
ASP.NET Core Pages Handler
问:
我的登录和注册表格在同一页面上。
在 ASP.NET Core razor 页面中,我有一个名为 的页面,其中有两个处理程序,一个用于登录和新用户注册。account
OnPostLogin
OnPostRegister
我在类级别定义了两个属性,以及 ,以便我可以使用标记帮助程序将表单输入连接到每个属性。在 中,我将每个表单都放在自己的处理程序中。当我想在代码中进行验证时,请使用此代码。loginModel
registerModel
asp-page-handler
if (ModelState.IsValid)
它从无效,并且由于其他表单条目而始终无效,也就是说,登录条目对注册无效(因为它们是空的),并且注册表单条目对登录也无效。
如何解决问题?
我敢打赌
if (ModelState.IsValid)
{
// Register Or Login Action
}
我从代码中删除了它,并使用jQuery验证在客户端执行了验证,但我也必须在服务器端执行此操作。
答:
0赞
Mike Brind
6/11/2023
#1
您可以将登录窗体和注册窗体分成两个不同的分部视图。这样,每个表单都将有其自己的独立范围和验证上下文。
这是我基于这个PageModel的工作演示:
public class RegisterOrLoginModel : PageModel
{
public class RegisterModel
{
[Required]
public string UserName { get; set; }
[Required]
public string Password { get; set; }
}
public class LoginModel
{
[Required]
public string UserName { get; set; }
[Required]
public string Password { get; set; }
}
}
下面是演示如何将相关类传递给其指令的部分:@model
_RegisterPartial.cshtml
@model RegisterOrLoginModel.RegisterModel
<h4>Register</h4>
<form method="post" asp-page-handler="Register">
<input asp-for="UserName" /><br />
<input asp-for="Password" /><br />
<button>Submit</button>
</form>
_LoginPartial.cshtml
@model RegisterOrLoginModel.LoginModel
<h4>Log In</h4>
<form method="post" asp-page-handler="Login">
<input asp-for="UserName" /><br />
<input asp-for="Password" /><br />
<button>Submit</button>
</form>
在 Razor 页面中包括两个部分,如下所示:
<partial name="_LoginPartial" model="new RegisterOrLoginModel.LoginModel()" />
<partial name="_RegisterPartial" model="new RegisterOrLoginModel.RegisterModel()" />
然后,不要在 PageModel 中有两个绑定属性,而是更新处理程序以将相应的模型作为参数。然后将只使用参数,不会受到其他东西的影响:ModelState
public void OnPostRegister(RegisterModel model)
{
if(ModelState.IsValid)
{
// ...
}
}
public void OnPostLogin(LoginModel model)
{
if (ModelState.IsValid)
{
// ...
}
}
或者,为每个表单创建单独的页面。
评论