Я просто пытаюсь создать страницу редактирования для своей базы данных Identity. Я использую Razor Pages, и я новичок в этом. Я нашел несколько решений для MVC, но они на самом деле не работают для меня из-за использования представлений и других вещей, таких как контроллеры. У меня есть главная страница Index.cshtml, где я могу выбирать пользователей из списка, как на изображении ниже.
И удалите их, нажав кнопку отправки.
Я обработал удаление так:
CSHTML-файл:
<button type="submit" class="btn btn-sm btn-danger" asp-route-id="@user.Id" asp-page-handler="Del">Del</button>
<button type="submit" class="btn btn-sm btn-primary" asp-route-id="@user.Id" asp-page-handler="Change">Change</button>
Файл CSHTML.CS:
public ApplicationUser ApUser { get; set; }
public async Task<ActionResult> OnPostDel(string id)
{
ApUsers = _userManager.Users.ToList();
ApUser = await _userManager.FindByIdAsync(id);
if (ApUser != null)
{
IdentityResult result = await _userManager.DeleteAsync(ApUser);
}
//return RedirectToAction("UserChange/Index");
return RedirectToPage("Index");
}
И у меня это прекрасно работает, но мне тоже нужно отредактировать. Итак, мой метод Edit POST в Index.cshtml.cs выглядит так:
public async Task<ActionResult> OnPostChange(string id)
{
ApUsers = _userManager.Users.ToList();
ApUser = await _userManager.FindByIdAsync(id);
if (ApUser == null)
{
return NotFound();
}
else return RedirectToPage("Edit");
}
А мой Edit.cshtml.cs выглядит так:
<form asp-action="Edit" asp-controller="Users">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<input type="hidden" asp-for="Id" />
</div>
<div class="form-group">
<label asp-for="Email" class="control-label">Email</label>
<input type="text" asp-for="Email" class="form-control" />
</div>
<div class="form-group">
<label asp-for="Score" class="control-label">Score</label>
<input type="number" asp-for="Score" class="form-control" />
</div>
...
<div class="form-group">
<input type="submit" asp-page-handler="Edit" value="Save" class="btn btn-default" />
</div>
</form>
И Edit.cshtml.cs:
public async Task<IActionResult> OnPostEdit(string id)
{
if (ModelState.IsValid)
{
ApUser = await _userManager.FindByIdAsync(id);
if (ApUser != null)
{
ApUser.Email = Email;
ApUser.UserName = Email;
ApUser.Score = Score;
ApUser.Position = Position;
ApUser.Sequence = Sequence;
var result = await _userManager.UpdateAsync(ApUser);
if (result.Succeeded)
{
return RedirectToAction("Index");
}
else
{
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
}
}
return RedirectToAction("Index");
}
И это конечно не работает. Я просто пытаюсь переделать пример MVC для Razor Pages. Возможно, у вас есть лучшие решения для этого, но я действительно застрял здесь.
asp-page="Edit"
к кнопке редактирования? Подробнее см. Демистификация ядра ASP.NET - Razor Pages. - person Mark G   schedule 16.05.2018Edit
страницы. Вы перенаправляете туда, чтобы браузер отправил туда запрос GET. Там вам нужно отобразить форму, которая затем отправляется через POST, где вы обновляете значения. - person poke   schedule 16.05.2018