当尝试在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();
}
}
我希望我可以通过任何操作来访问“公司”属性。但是当我去公司内部查找时,它为空。我也使用同一列表来填充页面上的选择列表,并且该列表已按预期填充。一旦我去发布,它为空。感谢任何人可以提供的任何帮助。
答案 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;
...