#c# #.net #razor
#c# #.net #бритва
Вопрос:
Я настроил страницу razor со следующим маршрутом — я не могу понять, как {email} и {token} отправляются на мой OnPost.
Он всегда возвращается как недопустимый ModelState, и я не уверен, как это исправить.. — есть идеи, пожалуйста? уверен, что это что-то простое, чего мне здесь не хватает..
@page "/ResetPassword/{email}/{token}
У меня есть форма, созданная как таковая:
<form method="post" asp-page-handler="OnPost">
@Html.AntiForgeryToken()
<input type="hidden" name="Token" value="@ViewContext.RouteData.Values["token"]" />
<input type="hidden" name="Email" value="@ViewContext.RouteData.Values["email"]" />
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="VModel.Password" class="control-label"></label>
<input asp-for="VModel.Password" class="form-control" />
<span asp-validation-for="VModel.Password" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="VModel.ConfirmPassword" class="control-label"></label>
<input asp-for="VModel.ConfirmPassword" class="form-control" />
<span asp-validation-for="VModel.ConfirmPassword" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
В исходном коде у меня есть:
[BindProperty]
public ResetPasswordViewModel VModel { get; set; }
public async Task<IActionResult> OnPost()
{
if (!ModelState.IsValid)
{
return Page();
}
var result = await _userService.ResetPasswordAsync(VModel);
if (result.IsSuccess)
{
return RedirectToPage("Success");
}
else
{
Errors = (List<string>)result.Errors;
return Page();
}
}
ResetPasswordViewModel:
public class ResetPasswordViewModel
{
[Required]
public string Token { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[StringLength(50, MinimumLength =5)]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required]
[Display(Name = "Confirm Password")]
[DataType(DataType.Password)]
[StringLength(50, MinimumLength = 5)]
public string ConfirmPassword { get; set; }
}
Ответ №1:
Поместите VModel перед вашим свойством…
<input type="hidden" name="VModel.Token" value="@ViewContext.RouteData.Values["token"]" />
<input type="hidden" name="VModel.Email" value="@ViewContext.RouteData.Values["email"]" />
Комментарии:
1. Спасибо за быстрый ответ!!
Ответ №2:
попробуйте использовать приведенный ниже код для токена и электронной почты
<input
id="VModel.Email"
name="VModel.Email"
type="hidden"
value="@ViewContext.RouteData.Values["email"]" />
<input
id="VModel.Token"
name="VModel.Token"
type="hidden"
value="@ViewContext.RouteData.Values["token"]" />