Reputation: 11
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; }
}
}
Upvotes: 0
Views: 762