来自View Component的Form Post

时间:2016-06-13 08:36:44

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

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

现在假设用户提供了错误的登录信息,我想将错误消息添加到模型状态并将其显示在我的表单下,就像正常验证一样。但事情是因为视图组件可以集成到各种各样的地方,我如何找到表单帖子的来源?

我想呈现用户用于再次输入其凭据的同一站点,只有验证错误。有没有办法找出表单帖子来自哪个View?或者更好的是有没有标准的方法来处理窗体作为ASP.NET Core MVC中的视图组件?

1 个答案:

答案 0 :(得分:4)

如果您继承自ViewComponent,则可以访问ViewContext属性,其中包含有关路径数据的所有内容,包括操作和控制器。然后,将IUrlHelperFactory注入到ViewComponent中(通过构造函数,然后存储为私有字段),并通过从工厂获取IUrlHelper来重新创建URL(传递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
    }
}