【问题标题】:Modeling and validating a form with multiple submit建模和验证具有多个提交的表单
【发布时间】:2018-11-03 16:59:22
【问题描述】:

我正在尝试找出使用 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,如果按下第二个提交按钮。我怎样才能做到这一点?

【问题讨论】:

  • 分离视图模型会解决问题,不是吗?

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


【解决方案1】:

我会将我的模型分成两类,然后改用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,...

【讨论】:

  • 请注意,如果至少发布了一个属性值,modelbinder 只会新建类。换句话说,如果您没有提交任何SignUp 的属性,那么这将为空。如果你的表单设计得当,这可以用来确定用户提交的表单没有单独的按钮。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 2020-01-20
  • 2012-01-20
  • 2021-04-28
  • 1970-01-01
  • 2014-04-05
相关资源
最近更新 更多