You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Razor页面中如何从PageModel为绑定的业务模型赋值

解决方案

步骤1:调整PageModel依赖注入

你使用了Identity框架获取当前用户,需要先在CreateModel中注入UserManager服务。

步骤2:将自动赋值逻辑放到OnPostAsync方法中

你原来在类成员位置直接写赋值代码属于语法错误,C#不允许在类的成员定义区域直接写执行代码,所有业务逻辑必须放到方法内。我们选在表单验证通过、数据入库前完成自动字段填充,位置在if (!ModelState.IsValid)判断之后,_context.Add操作之前。

修改后完整的PageModel代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using ArchiProjectManager.Data;
using ArchiProjectManager.Models;
using Microsoft.AspNetCore.Identity;

namespace ArchiProjectManager.Pages.Users.Clients
{
    public class CreateModel : PageModel
    {
        private readonly ApplicationDbContext _context;
        // 注入UserManager用于获取当前登录用户
        private readonly UserManager<User> _userManager;

        public CreateModel(ApplicationDbContext context, UserManager<User> userManager)
        {
            _context = context;
            _userManager = userManager;
        }

        public DateTime CurrentDate = DateTime.Now;

        public IActionResult OnGet()
        {
            return Page();
        }

        [BindProperty]
        public ModelForClients ModelForClients { get; set; }

        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            // 此处添加自动填充逻辑
            ModelForClients.CreationDate = DateTime.Now;
            ModelForClients.ModificationDate = DateTime.Now;
            // 获取当前登录用户对象
            var currentUser = await _userManager.GetUserAsync(User);
            ModelForClients.User = currentUser;
            // 如果UserType存的是用户名可以直接用下面的代码,不用查库
            // ModelForClients.UserType = User.Identity.Name;
            // 如果需要存用户的角色/类型,可以自行从currentUser对应的字段取

            _context.ModelForClients.Add(ModelForClients);
            await _context.SaveChangesAsync();

            return RedirectToPage("./Clients");
        }
    }
}

补充说明

如果你的UserType字段仅需要存储当前登录用户的显示名/账号,不需要关联完整的用户导航属性,可以直接使用User.Identity.Name赋值,不用注入UserManager也不用查数据库,性能更好。

内容的提问来源于stack exchange,提问作者AnthoVdo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:15:03