访问 Razor 页面中的属性

Accessing Properties in Razor Pages

当尝试在 OnPost() 操作中访问公司 属性 时,它是空的,但它不在 OnGet() 中。

总的来说,我是 .net 中的 Razor Pages 和 MVC 的新手。

public class CreateModel : PageModel
{
    ICompanyRepository _companyRepository;
    public CreateModel(ICompanyRepository companyRepository)
    {
        _companyRepository = companyRepository;
    }

    [BindProperty]
    public Company company { get; set; }

    [TempData]
    public string Message { get; set; }

    [BindProperty]
    public List<Company> Companies { get; set; } 

    public void OnGet()
    {
         Companies =_companyRepository.GetCompanies();            
    }

    public IActionResult OnPost()
    {       
        company.DatabaseId = Companies.Find(x => 
            x.CompanyId.Equals(company.CompanyId)).DatabaseId;

        company.Active = true;
        if(ModelState.IsValid)
        {
            try
            {
                _companyRepository.Create(company);
            }
            catch (Exception ex)
            {
                Message = ex.Message;
                return Page();
            }
        } 
        else
        {
            Message = "Please complete form";        
        }

        return Page();
    }
}

我希望我能够通过我的任何操作访问公司 属性。但是当我去 Find inside Companies 时,它是空的。我也在使用同一个列表来填充页面上的选择列表,并且列表按预期填充。一旦我转到 post,它就是空的。我感谢任何人可以提供的任何帮助。

网络是无状态的。每次向页面发出请求时,无论是 get 还是 post 请求的结果,都会创建页面的 PageModel class 并将其属性设置为默认值.一旦它完成了它的工作并生成了要渲染的 HTML,它和它的属性就会被销毁。

目前,您仅在请求使用 get 动词时填充 Companies 属性。当动词为 post:

时,您还需要填充 属性
public IActionResult OnPost()
{
    Companies =_companyRepository.GetCompanies();
    company.DatabaseId = Companies.Find(x => x.CompanyId.Equals(company.CompanyId)).DatabaseId;
    ...