ASP.在form post中,如何获取视图中复选框的复选状态



在我使用Identity框架的系统中,我在绑定到模型AppUser的视图中具有以下形式:

<div class="form-group">
    <label>Name</label>
    <p class="form-control-static">@Model.Id</p>
</div>
@using (Html.BeginForm("Edit", "Admin", new { returnUrl = Request.Url.AbsoluteUri }, FormMethod.Post, new { @id = "edituserform" }))
{
    @Html.HiddenFor(x => x.Id)
    <div class="form-group">
        <label>Email</label>
        @Html.TextBoxFor(x => x.Email, new { @class = "form-control" })
    </div>
    <div class="form-group">
        <label>Password</label>
        <input name="password" type="password" class="form-control" />
    </div>
 <input type="checkbox" name="userLockout" value="Account Locked" @(Html.Raw(Model.LockedOut ? "checked="checked"" : "")) /> @:Account Locked <br>
<button type="submit" class="btn btn-primary">Save</button>
    <button class="btn btn-default"
            id="canceleditbutton">
        Cancel
    </button>
}

AppUser模型定义:

public class AppUser : IdentityUser
{
   public bool LockedOut { get; set; }
   /*Other fields not shown for brevity*/
}

我的具体问题是关于锁定标志的复选框,这是我添加的自定义属性。对于测试用户,我手动将数据库中的标志设置为True,并且正如预期的那样,在视图中,复选框在加载时被选中。现在我的目标是能够在这个表单在提交时调用的AdminController的POST编辑方法中访问它。该方法的框架如下:

[HttpPost]
public async Task<ActionResult> Edit(string id, string email, string password, string userLockout)
{
 //Code here to change the LockedOut value in the database based on the input received
}

问题是,当我在编辑屏幕上的提交上单击Save时,userLockout参数出现为空。另外两个值被正确填充。如何访问userLockout值,以便在需要时继续将更改保存到数据库中?

最后,我在这里的最终目标是实现一个系统,管理员可以通过LockedOut标志锁定或解锁用户帐户(每次有人登录时都会检查该标志)。我知道Identity框架支持锁定,但这似乎只是受时间限制的锁定。在Identity框架中是否存在永久(除非手动更改)锁定的方法?我试图使用尽可能少的自定义代码和设计,所以这就是为什么我有兴趣知道这一点。特别是,我对使用框架跟踪不成功登录尝试计数的方式很感兴趣,因为我也想尽量避免手动实现。

谢谢。

在Edit方法中将userLockout类型更改为bool, post应该可以工作。

要在n次失败尝试后将用户锁定很长一段时间(永久锁定的子集),一种选择是将DefaultLockoutTimeSpan设置为未来的x年。

检查用户是否被锁定,试试UserManager.IsLockedOutAsync(userId)

相关内容

  • 没有找到相关文章

最新更新