asp.net核心非强制性验证在非必填字段上触发

时间:2018-09-02 08:04:31

标签: razor asp.net-core unobtrusive

我有一个包含2个字段的模型,并且两个字段都不是必需的(不使用[Required]标签)。

在剃须刀页面上,我包含了不显眼的和jquery验证js文件。当我不填写任何值并发布表单时,出现错误(客户端),要求输入表单的最后一个字段。

我已经搜索过但没有发现类似的问题,因为在model / viewmodel中没有必需的标记,然后为什么在客户端需要它。

[更新1:已添加代码]

型号:

public class AppUser: IdentityUser
{
public string Name { get; set; }
public int Deposit { get; set; }
}

查看:

<form method="post">
    <div class="form-group">
        <label asp-for="@Model.AppUser.Deposit" class="control-label"></label>
        <input asp-for="@Model.AppUser.Deposit" type="text" class="form-control" />
        <span asp-validation-for="@Model.AppUser.Deposit" class="text-danger"></span>
    </div>

    <div class="form-group">
        <label asp-for="@Model.AppUser.Email" class="control-label"></label>
        <input asp-for="@Model.AppUser.Email" type="text" class="form-control" />
        <span asp-validation-for="@Model.AppUser.Email" class="text-danger"></span>
    </div>
</form>

控制器:

public class SomeModel : PageModel
{
private readonly ApplicationDbContext _context;
private readonly UserManager<AppUser> _userManager;

[BindProperty]
public AppUser AppUser { get; set; }

public SomeModel(ApplicationDbContext context, UserManager<AppUser> userManager)
{
    _context = context;
    _userManager = userManager;
}

public async Task<IActionResult> OnGetAsync()
{
    //..some action
    return Page();
}

public async Task<IActionResult> OnPostAsync()
{
    //..some action
    return Page();
}
}

1 个答案:

答案 0 :(得分:1)

默认情况下,如intdoublebyte,...这样的非空类型是必需的,如果您希望它们是可选的,则必须使用可空类型,例如int?