|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
namespace FormatterWebSite.Controllers;
public class TopLevelValidationController : Controller
{
[BindProperty] public int OptionalProp { get; set; }
[BindProperty, Required] public int RequiredProp { get; set; }
[BindProperty, BindRequired] public int BindRequiredProp { get; set; }
[BindProperty, Required, BindRequired] public int RequiredAndBindRequiredProp { get; set; }
[BindProperty, StringLength(5)] public string OptionalStringLengthProp { get; set; }
[BindProperty, Range(1, 100), DisplayName("Some Display Name For Prop")] public int OptionalRangeDisplayNameProp { get; set; }
// Despite the Required/BindRequired attributes, these properties won't be validated
// because they aren't [BindProperty] properties (hence aren't involved in binding).
[Required] public int UnboundRequiredProp { get; set; }
[BindRequired] public int UnboundBindRequiredProp { get; set; }
// The [BindNever] overrides [BindProperty], meaning [Required] will not apply
// (nor will any incoming value be used)
[BindProperty, BindNever, Required] public string BindNeverRequiredProp { get; set; }
public IActionResult Index(
int optionalParam,
[Required] int requiredParam,
[BindRequired] int bindRequiredParam,
[Required, BindRequired] int requiredAndBindRequiredParam,
[StringLength(5)] string optionalStringLengthParam,
[Range(1, 100), Display(Name = "Some Display Name For Param")] int optionalRangeDisplayNameParam)
{
if (ModelState.IsValid)
{
return Content($@"
[{ nameof(OptionalProp) }:{ OptionalProp }]
[{ nameof(RequiredProp) }:{ RequiredProp }]
[{ nameof(BindRequiredProp) }:{ BindRequiredProp }]
[{ nameof(RequiredAndBindRequiredProp) }:{ RequiredAndBindRequiredProp }]
[{ nameof(OptionalStringLengthProp) }:{ OptionalStringLengthProp }]
[{ nameof(OptionalRangeDisplayNameProp) }:{ OptionalRangeDisplayNameProp }]
[{ nameof(UnboundRequiredProp) }:{ UnboundRequiredProp }]
[{ nameof(UnboundBindRequiredProp) }:{ UnboundBindRequiredProp }]
[{ nameof(BindNeverRequiredProp) }:{ BindNeverRequiredProp }]
[{ nameof(optionalParam) }:{ optionalParam }]
[{ nameof(requiredParam) }:{ requiredParam }]
[{ nameof(bindRequiredParam) }:{ bindRequiredParam }]
[{ nameof(requiredAndBindRequiredParam) }:{ requiredAndBindRequiredParam }]
[{ nameof(optionalStringLengthParam) }:{ optionalStringLengthParam }]
[{ nameof(optionalRangeDisplayNameParam) }:{ optionalRangeDisplayNameParam }]");
}
else
{
return BadRequest(ModelState);
}
}
}
|