Home > Mobile >  Problem while posting data to the database in ASP.NET Core, ModelState is invalid
Problem while posting data to the database in ASP.NET Core, ModelState is invalid

Time:06-16

This is how my .cs file looks and when I debugged the code, ModelState does have some value in it. But still the compiler goes into the the if statement. Not sure what's going wrong

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
        Console.WriteLine("There is some problem in the model coming in");
    }

    using (var db = _context)
    {
        db.UserData.Add(new UserDatum { 
            Username = Request.Form["username"],
            Password = Request.Form["password"],
            EmailId = Request.Form["email"] 
        });;
        await db.SaveChangesAsync();
    }

    return RedirectToPage("./Index");
}

HTML File

@page
@model IndianPoliticalData.Pages.UserCredentials.RegisterModel

<div>
    <form method="post">
        
        <label>Enter Username</label>
        <input type="text" name="username" placeholder="Email"/>

        <label>Enter Password</label>
        <input type="password" name="password" placeholder="Password" />
        
        <label>Enter EmailId</label>
        <input type="email" name="email" placeholder="Email"/>

        <button type="submit">Register</button>
    </form>
</div>

This is how my models look

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.EntityFrameworkCore;

namespace IndianPoliticalData.Models
{
    public partial class UserDatum
    {
        public UserDatum()
        {
            Bookmarks = new HashSet<Bookmark>();
        }

        [Key]
        [Column("ID")]
        public Guid Id { get; set; }
        [Column("username")]
        [StringLength(50)]
        [Unicode(false)]
        public string Username { get; set; } = null!;
        [Column("password")]
        [StringLength(50)]
        [Unicode(false)]
        public string Password { get; set; } = null!;
        [Column("emailId")]
        [StringLength(50)]
        [Unicode(false)]
        public string EmailId { get; set; } = null!;
        [Column("idCreatedTime", TypeName = "datetime")]
        public DateTime? IdCreatedTime { get; set; }

        [InverseProperty("User")]
        public virtual ICollection<Bookmark> Bookmarks { get; set; }
    }
}

Image of the ModelState in debug mode enter image description here

I read some documentation about ModelState.IsValid and it states that if the form data doesn't match the model then this returns as false. Id and datetime are set to not null and take a default value.

CodePudding user response:

Change your code, model binding need name attribute as same as property.

 <input type="email" name="EmailId" placeholder="Email"/>

Result:

enter image description here

CodePudding user response:

You could add these codes to see the details of your error and share with us

if (!ModelState.IsValid)
            {
                var errorlist = new List<string>();
                List<string> keys = ModelState.Keys.ToList();
                foreach (var key in keys)
                {
                    var errors = ModelState[key].Errors.ToList();
                    errors.ForEach(x => { errorlist.Add(x.ErrorMessage); });
                }
            }

enter image description here

  • Related