如何将参数传递给通过asp-page-handler标记调用的页面模型中定义的方法?

时间:2019-07-05 16:45:06

标签: razor-pages

我正在使用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
}

0 个答案:

没有答案