来自视图组件的表单 Post

Form Post from View Component

我正在构建一个小型 Web 应用程序来测试新的 ASP.NET Core MVC。 我实现了一个视图组件,其中包含一个登录表单,我需要将其插入到整个应用程序的各个位置。我的表单当前 post 将数据发送到处理登录的普通控制器。

既然用户提供了错误的登录信息,我想向模型状态添加一条错误消息并将其显示在我的表单下,就像正常验证一样。但问题是,既然视图组件可以集成在各种地方,我如何找出表单post来自哪里?

我想呈现用户用来再次输入其凭据的同一个站点,只是出现验证错误。有什么办法可以查出post这个View来自哪个View吗?或者更好的是,在 ASP.NET Core MVC 中是否有任何标准方法将表单作为视图组件处理?

如果您继承自 ViewComponent,您可以访问 ViewContext 属性,其中包括有关路由数据的所有内容,包括操作和控制器。然后,将 IUrlHelperFactory 注入您的 ViewComponent(通过构造函数,然后存储为私有字段),并通过从工厂获取 IUrlHelper(传入 ViewContext) 并对其调用 Action() 方法。

public class LoginViewComponent : ViewComponent {
    public LoginViewComponent(IUrlHelperFactory factory) {
        this.factory = factory;
    }
    private IUrlHelperFactory factory;

    public void Invoke() {
        IUrlHelper helper = factory.GetUrlHelper(ViewContext);
        helper.Action(); // returns url to the current controller action
    }
}