ModelState showing invalid, but the value is there?

623 Views Asked by At

I hope this makes sense what I am trying to do I have an application built with RazorPages that I am adding server side validation to for a Uni Project

I have an edit page with a form that a user can update their details which is to be validated with a model

When I run the code, even with all fields in the table filled, it is showing as invalid - when I look at the values, it seems the ID field is invalid,

the id from string userId = User.FindFirstValue(ClaimTypes.NameIdentifier); Ive attached a picture showing the invalid message also

Here is the code - html

<h1>User Profile</h1>
 <form asp-page-handler="EditProductRequest" class="new-request-form">
<div class="form-group p-2" >
               <h1>@User.Identity.Name</h1>
               <h1>@Model.UserId</h1>

            </div>  

            

           <div class="form-group p-2" >
                <label asp-for="prq.UserName" class="control-label"></label>
                <input asp-for="prq.UserName" class="form-control" value="@Model.prq.UserName" />
                <span asp-validation-for="prq.UserName" class="text-danger"></span>
            </div>

            @if (Model.UsernameTaken)
            { <p>That username is taken, try again</p> }
               
            

         <div class="form-group p-2" >
                <label asp-for="prq.Email" class="control-label"></label>
                <input asp-for="prq.Email" class="form-control" value="@Model.prq.Email" />
                <span asp-validation-for="prq.Email" class="text-danger"></span>
            </div>

            <div class="form-group p-2" >
                <label asp-for="prq.PhoneNumber" class="control-label"></label>
                <input asp-for="prq.PhoneNumber" class="form-control" value="@Model.prq.PhoneNumber" />
                <span asp-validation-for="prq.PhoneNumber" class="text-danger"></span>
            </div>

              <div class="form-group p-2" >
                <label asp-for="prq.FirstName" class="control-label"></label>
                <input asp-for="prq.FirstName" class="form-control" value="@Model.prq.FirstName" />
                <span asp-validation-for="prq.FirstName" class="text-danger"></span>
            </div>

              <div class="form-group p-2" >
                <label asp-for="prq.LastName" class="control-label"></label>
                <input asp-for="prq.LastName" class="form-control" value="@Model.prq.LastName" />
                 <span asp-validation-for="prq.LastName" class="text-danger"></span>
                </div>

                

            <div class="form-group p-2" >
                <label asp-for="prq.AddressFirstLine" class="control-label"></label>
                <input asp-for="prq.AddressFirstLine" class="form-control" value="@Model.prq.AddressFirstLine" />
                <span asp-validation-for="prq.AddressFirstLine" class="text-danger"></span>
            </div>

            <div class="form-group p-2" >
                <label asp-for="prq.AddressTown" class="control-label"></label>
                <input asp-for="prq.AddressTown" class="form-control" value="@Model.prq.AddressTown" />
                <span asp-validation-for="prq.AddressTown" class="text-danger"></span>
            </div>

         <div class="form-group p-2" >
                <label asp-for="prq.PostCode" class="control-label"></label>
                <input asp-for="prq.PostCode" class="form-control" value="@Model.prq.PostCode" />
                <span asp-validation-for="prq.PostCode" class="text-danger"></span>
         </div>

          <div class="row a p-2">
        <div class="form-group" style="display: block;">
            <input type="submit" value="Update Product" class="btn btn-primary" />
        </div>
        </div>
    </form> 

CS

public async Task<IActionResult> OnPostEditProductRequestAsync(string id)
    {




        string userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
        id = userId;

      

            if (!ModelState.IsValid)
            {
            await PopulatePage(id);
            return Page();
            }


        if (ModelState.IsValid)
        {
            if (await _urRepo.UserNameExists(prq.UserName))

            {

                UsernameTaken = true;

                await PopulatePage(id);
                return Page();

            }

            UserModel currentPrq;
            //string userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
            //id = userId;

            currentPrq = await _urRepo.GetUserById(id);   
            currentPrq.id = prq.id;
            currentPrq.UserName = prq.UserName;
            currentPrq.Email = currentPrq.Email;
            currentPrq.PhoneNumber = prq.PhoneNumber;
            currentPrq.FirstName = prq.FirstName;
            currentPrq.LastName = prq.LastName;
            currentPrq.DateOfBirth = DateTime.Now;
            currentPrq.AddressTown = prq.AddressTown;
            currentPrq.AddressFirstLine = prq.AddressFirstLine;
            currentPrq.PostCode = prq.PostCode;


            _ = await _urRepo.UpdateUserInfo(currentPrq);


            await PopulatePage(id);

        }
        await PopulatePage(id);
        return Page();

        

    }

}

Model

public class UserModel
{
    
    [Key]
    [ValidateNever]
    public string id{ get; set; }

    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required]
    [Display(Name = "Last Name")]
    public string LastName { get; set; }

    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required]
    [Display(Name = "Phone Number")]
    public string PhoneNumber { get; set; }

    [Required]
    [Display(Name = "Address:Street Name and Number")]
    public string AddressFirstLine { get; set; }

    [Required]
    [Display(Name = "Address: Town")]
    public string AddressTown { get; set; }

    [Required]
    [Display(Name = "Address:Postcode")]
    public string PostCode { get; set; }

    [Display(Name = "Date of Birth")]
    public DateTime DateOfBirth { get; set; }
}

}

0

There are 0 best solutions below