I cannot seem to use integers with <input asp-for="" />
when creating a new Department
instance, the value reverts to null when reaching OnPost()
. I have no idea as to what the issue is,
<input asp-for="" />
works fine for the other value types within Department
.
Department.cs
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Diagnostics.CodeAnalysis;
namespace Scratch.Data
{
public class Department
{
[Key]
public int Id { get; set; }
[Required]
public string departmentName { get; set; }
[Required]
[ForeignKey("AspNetUsers")]
public string departmentManagerId { get; set; }
[AllowNull]
[ForeignKey("AspNetUserRoles")]
public string? managerRoleId;
[AllowNull]
[ForeignKey("AspNetUserRoles")]
public string? userRoleId;
[AllowNull]
public int? defaultDisplayOrder;
}
}
I simplified the code below down to testing for the one input I want to get from the page:
CreateDepartmentIntTestModel
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Build.Evaluation;
using Microsoft.CodeAnalysis;
using Microsoft.EntityFrameworkCore;
using Scratch.Data;
using System.Text.RegularExpressions;
using Microsoft.AspNetCore.Mvc.TagHelpers;
namespace Scratch.Pages.Admin_Tools
{
[BindProperties]
[Authorize(Roles = "Administrators,ProjectManager")]
public class CreateDepartmentIntTestModel : PageModel
{
private readonly ApplicationDbContext _db;
private readonly UserManager<IdentityUser> _userManager;
private readonly IUserStore<IdentityUser> _userStore;
private readonly RoleManager<IdentityRole> _roleManager;
private readonly IRoleStore<IdentityRole> _roleStore;
public Department Department { get; set; }
public CreateDepartmentIntTestModel(ApplicationDbContext db, UserManager<IdentityUser> userManager,
IUserStore<IdentityUser> userStore,
RoleManager<IdentityRole> roleManager,
IRoleStore<IdentityRole> roleStore)
{
_db = db;
_userManager = userManager;
_userStore = userStore;
_roleManager = roleManager;
_roleStore = roleStore;
}
public async Task<IActionResult> OnGet()
{
return Page();
}
public async Task<IActionResult> OnPost()
{
//this is always null despite inputs
if (Department.defaultDisplayOrder == null)
{
//add breakpoint here:
ModelState.AddModelError("Department.defaultDisplayOrder", "display order is null");
}
return Page();
}
}
}
Html
@page
@model Scratch.Pages.Admin_Tools.CreateDepartmentIntTestModel
@{
}
<form method="post">
<input hidden asp-for="Department.managerRoleId" />
<input hidden asp-for="Department.userRoleId" />
<div class="border p-3 mt-4">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="row pb-2">
<h2 class="text-primary pl-3">
Test to enter a numeric value to department:
</h2>
</div>
<div class="mb-3">
Department Display Order Value:
<input asp-for="Department.defaultDisplayOrder" class="form-control" />
<span asp-validation-for="Department.defaultDisplayOrder" class="text-danger"></span>
<hr/>
</div>
<button type="submit" class="btn btn-primary" style="width:150px;">Create</button>
</div>
</form>