0

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; }
}

}

uber_wench
  • 11
  • 2
  • i dont see any picture. on whitch field is the error message if it is on the id then try to put it into hidden input on this way it will be passed back to the action method – spzvtbg May 07 '22 at 09:14
  • my apologies, it is on this field, [0] = {[id, SubKey={id}, Key=id, ValidationState=Invalid]} - I did try adding a hidden field but it then shows the hidden field as valid and yet the id field as invalid – uber_wench May 07 '22 at 09:26

0 Answers0