【问题标题】:How to handle form post from View Component (Razor Core 2)如何处理来自视图组件的表单发布(Razor Core 2)
【发布时间】:2020-04-28 06:48:04
【问题描述】:

这个周末在视图组件方面遇到了很多困难。

我尝试添加一个自动回发 onchange 的下拉列表。此下拉列表位于视图组件上。

我有两个问题:

  1. 发布后我没有得到 asp-page-handler,它是否像我在 form-tag 上实现的那样工作?
  2. 在包含视图的 razor 页面上发布调用方法 public void OnPost 零件。我认为最好有一个方法 像 OnChangeProject 一样查看组件?

我的View(视图组件)的代码:

<form asp-page-handler="ChangeProject" method="post">

    @Html.AntiForgeryToken()
    @Html.DropDownList("id", new SelectList(Model, "Id", "Id"), new { onchange = "this.form.submit()" })

</form>

提前致谢!!

【问题讨论】:

    标签: razor asp.net-core-2.0 asp.net-core-viewcomponent


    【解决方案1】:

    我遇到了同样的问题,我修复它的方式已经在你的问题中得到了回答。

    表单调用是在您嵌入视图组件的页面上进行的。我认为甚至不可能使用asp-page-handler 在您的视图组件中调用处理程序,因为这是 Razor Pages 标记助手。

    我得到它的方法是简单地将页面处理程序方法放在嵌入视图组件的PageModel 上。在你的情况下,你可以简单地在你的 Razor 页面上实现这个处理程序:

    public IActionResult OnPostChangeProject()
    {
        // ... do Something
    }
    

    我不知道如何在视图组件中触发控制器方法。可能创建一个新的 Controller 类并在您的表单标签中使用 asp-controllerasp-action 路由到它。

    【讨论】:

      【解决方案2】:

      可以通过使用 ViewComponent(Name="myviewcomponent") 装饰控制器来创建组合(控制器/视图组件)。

      然后像往常一样创建invokeasync,但是由于控制器没有从ViewComponent 继承,因此返回结果将是ViewComponent 结果之一(ViewViewComponentResult 等)。

      然后,视图组件中的表单可以有一个带有 asp-controller/action 标签助手的按钮,该标签帮助程序针对控制器/动作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-17
        • 1970-01-01
        • 2014-09-27
        • 2013-05-05
        • 1970-01-01
        • 2017-03-03
        • 2017-01-15
        相关资源
        最近更新 更多