使用多个提交建模和验证表单

时间:2018-05-24 12:43:20

标签: c# asp.net-mvc validation asp.net-core asp.net-core-2.0

我正在尝试使用ASP.Net Core 2来确定使用多个表单标签和多个提交按钮来建模和验证表单的正确方法。我所拥有的是一个用户可以输入用户名和密码的表单。登录或输入他们的名字,姓氏和手机号码并注册。这是我的模特:

public class Landing
{
    [Required]
    public string Username { get; set; }
    [Required]
    public string Password { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    public string CellNumber { get; set; }
}

这是我的相关剃刀视图代码:

@model MyApp.ViewModels.Landing

<form method="post">
    <div>
        <input asp-for="Username" type="text" />
    </div>
    <div>
        <input asp-for="Password" type="password" />
    </div>
    <div>
        <input type="submit" value="Sign In" />
    </div>
</form>

<form method="post">
    <div>
        <input asp-for="FirstName" type="text" />
    </div>
    <div>
        <input asp-for="LastName" type="text" />
    </div>
    <div>
        <input asp-for="CellNumber" type="text" />
    </div>
    <div>
        <input type="submit" value="Sign Up" />
    </div>
</form>

现在遇到的问题是我的验证。因为我的所有字段都标有[Required]属性,所以当我使用提交按钮提交表单时,它会验证所有5个字段。我想要做的只是验证UserNamePassword,如果第一个提交按钮被推送或仅验证FirstNameLastNameCellNumber,如果第二个提交按钮被按下。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:4)

我会将我的模型分成两个类,然后使用ViewModel代替:

public class SignIn
{
    [Required]
    public string Username { get; set; }
    [Required]
    public string Password { get; set; }
}

public class SignUp
{
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    public string CellNumber { get; set; }
}

public class LandingViewModel
{
    public SignIn SignIn { get; set; }
    public SignUp SignUp { get; set; }
}

然后:

@model MyApp.ViewModels.LandingViewModel
SignIn.Username, SignIn.Password, SignUp.FirstName,...