访问Razor页面中的属性

时间:2019-08-16 20:19:29

标签: c# .net-core razor-pages

当尝试在OnPost()操作中访问Companies属性时,该属性为空,但不在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();
    }
}

我希望我可以通过任何操作来访问“公司”属性。但是当我去公司内部查找时,它为空。我也使用同一列表来填充页面上的选择列表,并且该列表已按预期填充。一旦我去发布,它为空。感谢任何人可以提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

网络是无状态的。每次对页面提出请求时,无论是get还是post请求的结果,都会创建页面的PageModel类并将其属性设置为其默认值。一旦完成工作并生成要呈现的HTML,它及其属性就会被破坏。

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

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