Удалить пользователя с пользовательской моделью и представлением по умолчанию. Модель httppost имеет значение null - PullRequest
0 голосов
/ 08 апреля 2019

Я просто пытаюсь удалить пользователя с представлением по умолчанию для учетной записи пользователя. У меня есть заказная модель с пользовательскими данными. Я могу загрузить первое представление httpget для удаления с правильными данными в моей пользовательской модели, но когда я передаю его в httppost для удаления, модель становится пустой. Я пробовал несколько разных способов, чтобы эта модель была видна действием, по умолчанию BeginForm () Передача контроллера и действия в beginform, передача модели и контроллера и действия в beginform с параметром post.

P.S. - если я передам идентификатор таким образом DeleteConfirmed (идентификатор строки) и снова получу пользователя с помощью findbyidasync (id), я могу удалить такого успешного пользователя. Почему я не могу пройти в модели?

Вот мой код

 // button that opens my delete view with the correct data.                                 @Html.ActionLink("Delete My Account", "DeleteUser", "Users",
     new { id = Model.UserId }, new { @class = "btn btn-danger" })                          //Delete View    @model MVC_TimeSh.Models.UpdateUserViewModel
@{ 
    ViewBag.Title = "Delete Account";
}
<h3>Are you sure you want to delete your account?</h3>
<div>
    <h4>Delete Confirmation</h4>
    <hr />
    <dl class="dl-horizontal">
        @*@Html.HiddenFor(u => u.UserId)*@
        <dt>@Html.DisplayNameFor(model => model.UserId) </dt>
        <dd>@Html.DisplayFor(model => model.UserId) </dd>
        <dt> @Html.DisplayNameFor(model => model.IdShortened) </dt>                      @* "DeleteUser", "Users", FormMethod.Post, Model *@
    @using (Html.BeginForm("DeleteUser", "Users", 
            new { UpdateUserViewModel = Model }, FormMethod.Post)){
        @Html.AntiForgeryToken()                                                       <div class="form-actions no-color">
            <input type="submit" value="Delete" class="btn btn-danger"
                   onclick="return confirm('Confirmation of Delete Account?');" /> |
// GET: /User/Delete/{id}
        public async Task<ActionResult> DeleteUser(string id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            var user = await UserManager.FindByIdAsync(id);
            if (user == null)
            {
                return HttpNotFound();
            }
            var userRole = await UserManager.GetRolesAsync(user.Id);

            return View(new UpdateUserViewModel()
            {
                UserId = user.Id,
                IdShortened = user.Id.Substring(0, 10),
                Name = user.Name,
                PhoneNumber = user.PhoneNumber,
                Birthday = user.Birthday,
                DateCreated = user.DateCreated,
                Email = user.Email,
                UserName = user.UserName,
                UserRoles = userRole.FirstOrDefault()
            });
        }
        // POST: /User/Delete/{id}
        [HttpPost, ActionName("DeleteUser")]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> DeleteConfirmed(UpdateUserViewModel model)
        {
            if (ModelState.IsValid)
            {
                if(model == null)
                {
                    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
                }
                var user = await UserManager.FindByIdAsync(model.UserId);
                var logins = user.Logins;
                var roles = await UserManager.GetRolesAsync(user.Id);
                // Supposed to only be 1 role but just in case -
                if(roles.Count() > 0)
                {
                    foreach(var r in roles)
                    {
                        var deleteRole = await UserManager.RemoveFromRoleAsync(user.Id, r);
                    }
                }
                var result = await UserManager.DeleteAsync(user);
                if (result.Succeeded)
                {
                    TempData["Success"] = "User Deleted Successfully";
                    return RedirectToAction("UserDashboard", "Users");
                }                
            }
            TempData["Error"] = "User Delete Unsuccessful";
            return RedirectToAction("UserDashboard", "Users");
        }
...