【问题标题】:Accessing Properties in Razor Pages访问 Razor 页面中的属性
【发布时间】:2019-12-23 03:12:49
【问题描述】:

当尝试在 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();
    }
}

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢迈克的解释。我没有意识到它是这样工作的。这肯定会帮助我前进。
    猜你喜欢
    • 2018-10-31
    • 2020-10-24
    • 2022-09-23
    • 2021-09-12
    • 2020-05-01
    • 2021-06-18
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多