我試圖添加一個復選框并處理更改事件,如果我這樣做,我可以發回控制器
<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>
uj5u.com熱心網友回復:
HTML5 中的復選框有點特殊,因為它們在未選中時不會提交值。
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-6.0#checkbox-hidden-input-rendering
如果您對 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>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490702.html
