如何从View Component(Razor Core 2)处理表单帖子

时间:2018-04-16 11:45:02

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

本周末很多人都在与View Component斗争。

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

我有两个问题:

  1. 我在帖子之后没有得到asp-page-handler,它是否像我在form-tag上实现的那样工作?
  2. 在包含视图的剃刀页面上调用post方法public void OnPost 零件。我认为最好有一个方法 查看OnChangeProject等组件?
  3. 我的视图代码(查看组件):

    <form asp-page-handler="ChangeProject" method="post">
    
        @Html.AntiForgeryToken()
        @Html.DropDownList("id", new SelectList(Model, "Id", "Id"), new { onchange = "this.form.submit()" })
    
    </form>
    

    提前致谢!!

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,而解决问题的方式已经在您的问题中得到了解答。

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

我得到它的方法是简单地将页面处理程序方法放在嵌入视图组件的PageModel上。您可以在剃刀页面上简单地实现此处理程序:

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

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

答案 1 :(得分:0)

可以通过用ViewComponent(Name =“ myviewcomponent”)装饰控制器来创建组合(Controller / ViewComponent)。

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

然后,viewcomponent中的表单可以具有一个按钮,该按钮带有asp-controller / action标签助手,以控制器/动作为目标。