63 lines
3.3 KiB
C#
63 lines
3.3 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|