8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

在 Blazor 中编辑自定义 ASP.NET IdentityUser 属性

asha 2月前

20 0

我正在尝试创建一个 Blazor 表单来更新 AppUser 的属性/设置,该 AppUser 继承自我的 Blazor webapp 中的默认 ASP.NET IdentityUser。为此,我尝试修改默认

我正在尝试创建一个 Blazor 表单来更新 AppUser 的属性/设置,该表单从我的 Blazor webapp 中的默认 ASP.NET IdentityUser 继承而来。为此,我正在尝试修改默认身份页面,具体来说 /Account/Manage 。默认页面可用于更改用户存储的电话号码。我想更改 AppUser 的一个属性 PageSize

@page "/Account/Manage"

@using System.ComponentModel.DataAnnotations
@using Microsoft.AspNetCore.Identity
@using MyApp.Data

@inject UserManager<AppUser> UserManager
@inject SignInManager<AppUser> SignInManager
@inject IdentityUserAccessor UserAccessor
@inject IdentityRedirectManager RedirectManager

<PageTitle>Profile</PageTitle>

<h3>Profile</h3>
<StatusMessage />

<div class="row">
    <div class="col-md-6">
        <EditForm Model="Input" FormName="profile" OnValidSubmit="OnValidSubmitAsync" method="post">
            <DataAnnotationsValidator />
            <ValidationSummary class="text-danger" role="alert" />
            <div class="form-floating mb-3">
                <input type="text" value="@username" class="form-control" placeholder="Please choose your username." disabled />
                <label for="username" class="form-label">Username</label>
            </div>
            <div class="form-floating mb-3">
                <InputNumber @bind-Value="Input.PageSize" class="form-control" placeholder="Number of rows in each page of data grid." />
                <label for="page-size" class="form-label">Page size</label>
                <ValidationMessage For="() => Input.PageSize" class="text-danger" />
            </div>
            <button type="submit" class="w-100 btn btn-lg btn-primary">Save</button>
        </EditForm>
    </div>
</div>

@code {
    private AppUser user = default!;
    private string? username;
    private int pageSize;

    [CascadingParameter]
    private HttpContext HttpContext { get; set; } = default!;

    [SupplyParameterFromForm]
    private InputModel Input { get; set; } = new();

    protected override async Task OnInitializedAsync()
    {
        user = await UserAccessor.GetRequiredUserAsync(HttpContext);
        username = await UserManager.GetUserNameAsync(user);
        pageSize = user.PageSize;

        Input.PageSize = pageSize;
    }

    private async Task OnValidSubmitAsync()
    {
        if (Input.PageSize != pageSize)
        {
            user.PageSize = Input.PageSize;
            var setPageSizeResult = await UserManager.UpdateAsync(user);
            if (!setPageSizeResult.Succeeded)
            {
                RedirectManager.RedirectToCurrentPageWithStatus("Error: Failed to set page size.", HttpContext);
            }
        }

        await SignInManager.RefreshSignInAsync(user);
        RedirectManager.RedirectToCurrentPageWithStatus("Your profile has been updated", HttpContext);
    }

    private sealed class InputModel
    {
        [Display(Name = "Page size")]
        [Range(1, int.MaxValue)]
        public int PageSize { get; set; }
    }
}

正如您所看到的,我只将代码行从 PhoneNumber which was a string? PageSize which is an int。

表单加载正常,但未更新数据库中的数据。事实上, Input 中的对象 OnValidSubmitAsync 不包含表单中更新的数据。我从浏览器开发控制台检查过,确实 Input.PageSize 获得了 POSTed ,但后面的代码没有收到正确的值。

通过反复试验,我发现在其他地方更改 int 为必需的 int? prop InputModel 可以使我的代码正常工作。但我不明白为什么。而且由于我也希望 bool 使用此表单更新属性,并且 Blazor InputCheckbox 组件无法处理可空布尔值,因此我需要上面的代码才能正常工作。

任何帮助都将非常感激。

帖子版权声明 1、本帖标题:在 Blazor 中编辑自定义 ASP.NET IdentityUser 属性
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由asha在本站《asp.net》版块原创发布, 转载请注明出处!
最新回复 (0)
  • \“通过反复试验,我发现将 In​​putModel 和其他地方的 int 更改为必需的 int?prop 可以使我的代码正常工作。\”它现在正在更新吗?

  • @JerdineSabio 是的,PageSize 使用可空 int 进行更新。真的很奇怪。但是,我的 AppUser 也有一些我想使用此表单设置的 bool 属性,而 InputCheckbox 不允许

返回
作者最近主题: