我正在使用Asp.NET Razor Pages构建Web应用程序,但是遇到了从.cshtml页面调用页面模型中的方法的问题。
我在页面模型中定义了一种方法,如下所示:
public IActionResult OnPostCreateDocument(InvoiceEntity inv)
{
//code to create a PDF file from the InvoiceEntity
}
如您所见,我需要向其传递一个 InvoiceEntity 对象。我在创建一个包含每个 InvoiceEntity 的详细信息的表时,遍历.cshtml中的 InvoiceEntity 对象的列表,然后在该行的最后一列中每张发票,我都会插入一个按钮,该按钮将调用 OnPostCreateDocument ()方法,并且需要向其传递该行的特定InvoiceEntity。 .cshtml文件中的代码:
@foreach(InvoiceEntity inv in invoices)
{
<table>
<thead>
<tr>
<th>InvKey</th>
<th>InvDate</th>
<th>Contractor</th>
<th>Download PDF</th>
</tr>
</thead>
<tbody>
<tr>
<td>@inv.InvKey</td>
<td>@inv.InvDate</td>
<td>@inv.Contractor</td>
<td><form method="post" asp-page="ListInvoices" asp-page-handler="CreateDocument"><div><input type="submit" value="PDF" style="width:40px;height:30px" /></div></form></td>
</tr>
</tbody>
</table>
}
我无法弄清楚如何将 InvoiceEntity 传递给处理程序方法:(我希望我可以使用 asp-page 来定义页面strong>和使用 asp-page-handler 的方法,会出现类似 asp-page-handler-args 这样的参数,我可以将参数传递给它,但我找不到类似的东西...
注意:如果很重要,该方法所在的页面实际上不是 asp-page-handler 标记所在的特定.cshtml文件的模型,尽管该模型不似乎没有问题,因为我只是通过引用asp-page标记中的目标页面模型来使其达到代码中的正确方法,我只是无法让它向其传递参数。>
我尝试在HTML代码中使用 asp-route (添加 asp-route-inv =“ @@ em> inv ”),但是当它用属性中为null或0的新InvoiceEntity而不是我发送给处理程序方法的发票明细命中了剩下的方法。通过@ inv 。
我尝试以相同的方式向同一方法发送一个简单的int( asp-route-num =“ 5”在我添加“ int num”时在我的方法中显示了数字5使用参数this blog post中概述的方法),也许它不适用于更复杂的对象?我可以在那篇博客文章中看到他发送了一个字符串和一个int,我的 InvoiceEntity 里面有很多小对象……
我已经更新了.cshtml代码行,在其中我按如下方式调用处理程序方法:
<td><form method="post" asp-page="ListInvoices" asp-page-handler="CreateDocument"><div><input name="invoice" type="submit" value="@JsonConvert.SerializeObject(inv)" text="PDF" style="width:40px;height:30px"/></div></form></td>
然后我将InvoiceEntity的Json字符串拉出到我的处理程序方法中,并将其反序列化回InvoiceEntity:
public IActionResult OnPostCreateDocument()
{
InvoiceEntity inv = JsonConvert.DeserializeObject<InvoiceEntity>
(Request.Form["invoice"]);
//code to create a PDF file from the InvoiceEntity
}