我试图添加一个复选框并处理更改事件,如果我这样做,我可以发回控制器
<input type="checkbox" name="RememberMe" checked="@ViewBag.RememberMe" /> RememberMe
它总是发布错误,我不知道如何处理更改事件或是否/如何扩展 @model AuthenticationScheme[] 以包含 RememberMe 属性
控制器
[HttpPost("~/signin")]
public async Task<IActionResult> SignIn([FromForm] string provider, bool rememberMe)
{
// Note: the "provider" parameter corresponds to the external
// authentication provider choosen by the user agent.
_serverStore.RememberMe = rememberMe;
if (string.IsNullOrWhiteSpace(provider))
{
return BadRequest();
}
if (!await HttpContext.IsProviderSupportedAsync(provider))
{
return BadRequest();
}
if (User.Identity is not null && User.Identity.IsAuthenticated)
{
User? user = new()
{
NameIdentifier = 0,
Email = string.Empty
};
long dbuserId = await CreateOrUpdateUser(user).ConfigureAwait(false);
ClaimsIdentity? identity = User.Identity as ClaimsIdentity;
identity?.AddClaim(new Claim("Id", dbuserId.ToString()));
return Redirect("/");
}
return Challenge(new AuthenticationProperties { RedirectUri = "/Login", ExpiresUtc = DateTime.UtcNow.AddYears(1), IsPersistent = true, AllowRefresh = true, IssuedUtc = DateTime.Now, Items = { new KeyValuePair<string, string?>("MyId", "123456") } }, provider);
}
看法
@using Microsoft.AspNetCore.Authentication
@model AuthenticationScheme[]
<div class="jumbotron">
<h1>Authentication</h1>
<p class="lead text-left">Sign in using one of these external providers:</p>
@foreach (var scheme in Model.OrderBy(p => p.DisplayName))
{
<form action="/signin" method="post">
<input type="hidden" name="Provider" value="@scheme.Name" />
<input type="hidden" name="ReturnUrl" value="@ViewBag.ReturnUrl" />
@*<input type="checkbox" name="RememberMe" checked="@scheme." onchange =@HandleRememberMeChange(a) /> RememberMe*@
<button class="btn btn-lg btn-success m-1" type="submit">Connect using @scheme.DisplayName</button>
</form>
}
</div>
HTML5 中的复选框有点特殊,因为它们在未选中时不会提交值。
如果您对 asp net core 使用 Input Tag Helpers,这将解决问题(请参阅提到的文档。
或者,您可以添加自己的自定义 JavaScript,这将更改更改时的值,并且仅在选中时发送到服务器(这不会是问题,因为服务器会给它一个默认值,对于布尔值是 false。
这是一个基本的 HTML 示例,您可以如何实现此功能。
<body>
<form method="post">
<input type="checkbox" name="RememberMe">Remember Me
<input type="text" name="Username" placeholder="Username">
<button type="submit">Send</button>
</form>
<script>
var checkbox = document.querySelector('input[type="checkbox"]');
checkbox.addEventListener('change', function(){
if(checkbox.checked){
checkbox.value = 'true';
}else{
checkbox.value = 'false';
}
});
</script>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句