我有一个包含以下内容的类(简化为简洁)
[BindProperty(SupportsGet = true)]
public List<Expenditure> ListExpendituresOver90Days { get; set; }
public async Task OnGetAsync(int projectId, string ExpenditureFilter, string personnelNo)
{
ListExpendituresOver90Days = ExpendituresList.ToList();
}
public async Task<IActionResult> OnPostButtonAsync()
{
return page();
}
和cshtml具有:
@model WorkInProgress.Pages.Expenditures
<thead>
<tr>
<th class = text-start>Task Number</th>
<th class = text-start>Expenditure Type</th>
<th class = text-end>Item Date</th>
<th class = text-end>Billable</th>
<th class = text-end>Vendor Id</th>
<th class = text-start>Vendor Name</th>
<th class = text-end>Revenue Amount</th>
<th class = text-end>Comments</th>
</tr>
</thead>
<tbody>
@for (var x = 0; x < @Model.ListExpendituresOver90Days.Count(); x++)
{
@Html.HiddenFor(model => model.ListExpendituresOver90Days[x].ExpenditureItemId)
<tr>
<td class=text-start>@Model.ListExpendituresOver90Days[x].TaskNumber</td>
<td class=text-start>@Model.ListExpendituresOver90Days[x].ExpenditureType</td>
<td class=text-end>@Model.ListExpendituresOver90Days[x].ExpenditureItemDate.ToString("dd-MMM-yyyy")</td>
<td class=text-end>@Model.ListExpendituresOver90Days[x].BillableFlag</td>
<td class=text-end>@Model.ListExpendituresOver90Days[x].VendorId</td>
<td class=text-start>@Model.ListExpendituresOver90Days[x].SupplierName</td>
<td class=text-end>@Model.ListExpendituresOver90Days[x].ProjFuncRevenueAmount</td>
<td class=text-end>
<textarea class="form-control" form="MainForm" asp-for="@Model.ListExpendituresOver90Days[x].ExpenditureComment" rows="1"></textarea>
</td>
</tr>
}
</tbody>
<div class="form-control">
<button type="submit" class="btn btn-primary" asp-page-handler="Button">Save</button>
</div>
当页面加载时,所有列的数据都会被填充,而对象"ListExpendituresOver90Days“包含枚举数,并按应有的方式填充所有属性:
但是,当我单击"Save“按钮并调用onPost方法时,该对象返回为空,除了在注释TextArea中插入的值:
我只尝试了复制我的错误所需的东西,但是万一有用的话,我在这里放置了一个GIST,其中包含了用于这个屏幕的所有代码:
https://gist.github.com/gasguirre/18a19d07cf1c14db2aafb539253461f9
对于不正常工作的for循环,我使用的部分在"_Over90DaysExpenditureLayout.cshtml“中
发布于 2022-06-26 23:47:39
这就是网络的工作原理--从设计上看,它是无状态的。在发出GET请求时,将实例化PageModel并调用OnGet
方法。一旦发送了HTML,PageModel实例连同它的所有状态都会被销毁。当您发出POST请求时,将创建PageModel的一个新实例,并调用OnPostButtonAsync
方法。OnGetAsync
方法不是按约定调用的,它只对GET请求调用。如果希望在POST请求处理程序中重新组合每个Expenditure
中的所有值,则可以为每个字段创建隐藏字段。
https://stackoverflow.com/questions/72764901
复制