繁体   English   中英

提交表单时,甜蜜警报不会发送我元素的ID(ASP.Net core mvc)

[英]Sweet alert doesn't send the Id of my element when submiting the form (ASP.Net core mvc)

我有一个关于在Asp.net核心2.2 mvc上使用甜蜜警报的问题。 在尝试发出警报以确认我的控制器AdminUsersController上的发布事件时,该操作返回错误,因为请求的id为null ,但是当我不使用sweet alert时,该事件工作正常。

我试图让这个在Visual Studio 2017社区的Asp.net核心2.2上工作,我之前从未遇到任何有关Id的crud操作的问题。 我正试图让它在一个桌面上工作,其中有许多不同的ID结果。

像这样: https//gyazo.com/9366bab83fa4401e1b88b28e27ffa55f

控制器索引帖子

        //== Action - Index
        [Authorize(Roles = SD.Tier3User)]
        [HttpPost, ValidateAntiForgeryToken]
        public async Task<ActionResult> Index(string id)
        {
            var UserFromDb = await _db.ApplicationUser.FindAsync(id);

            if (UserFromDb.LockoutEnabled == true)
            {
                //== Lo desactiva (LockOutEnabled = 0)
                UserFromDb.LockoutEnabled = false;
            }
            else
            {
                //== Lo activa (LockOutEnabled = 1)
                UserFromDb.LockoutEnabled = true;
            }

            await _db.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }

HTML按钮

<td>
    @if (User.IsInRole(SD.Tier3User))
        {
          <a asp-action="Edit" asp-route-id="@item.User.Id" class="btn btn-sm 
           btn-outline-primary">Editar</a>

           == HERE I USE SWEET ALERT ===
           @if (item.User.LockoutEnabled)
             {
<button type="submit" onclick="CambiarEstado()" asp-route-id="@item.User.Id" class="btn btn-sm btn-outline-warning">Desactivar</button>
              }
              else
              {
<button type="submit" onclick="CambiarEstado()" asp-route-id="@item.User.Id" class="btn btn-sm btn-outline-success">Re-activar</button>


              }<a asp-action="Delete" asp-route-id="@item.User.Id" class="btn btn-sm btn-outline-danger"><i class="far fa-trash-alt"></i></a>
         }
</td>

JS Sweet警报

    <script>
        function CambiarEstado() {
            document.querySelector('#Estado').addEventListener('submit', function (event) {
                var form = this;
                event.preventDefault();

                swal({
                    title: "¿Desea cambiar el estado de este usuario?",
                    icon: "success",
                    buttons: [
                        'No',
                        'Si'
                    ],

                }).then(function (isConfirm) {
                    if (isConfirm) {
                        swal("¡Estado cambiado!", {
                            buttons: false,
                            timer: 500,
                        }).then(function () {

                            form.submit();
                        });
                    } else {
                        swal("Acción cancelada", "Recuerde que un usuario desactivado no puede entrar al sistema", "error");
                    }
                })
            });
        }
    </script>

假设要取消激活用户,但首先询问我是否确定该操作,而是返回错误,因为post事件获得的id为null

提前致谢!

asp-route-*属性在button元素上无效。 该属性是专门通过利用AnchorTagHelper (即,对于a元素)。 您需要使用实际的锚标记,并将其设置为按钮:

<a onclick="CambiarEstado()" asp-action="Foo" asp-route-id="@item.User.Id" class="btn btn-sm btn-outline-warning">Desactivar</a>

或者,您需要在form标记中创建隐藏输入以保存ID:

<input type="hidden" name="id" value="@item.User.Id" />

注意:目前还不清楚这里发生了什么,所以你应该记住,如果你使用动作链接方法,那就不会提交任何内容。 那时它是一个常规的GET请求, id将作为查询参数添加到生成的href中(因此需要指定asp-action )。 更有可能的是,您希望坚持使用按钮并添加隐藏的输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM