我正在构建一个小型Web应用程序来测试新的ASP.NET Core MVC。 我实现了一个View组件,其中包含一个登录表单,我需要将其插入整个应用程序的各个位置。我的表单目前将数据发布到处理登录的普通控制器。
现在假设用户提供了错误的登录信息,我想将错误消息添加到模型状态并将其显示在我的表单下,就像正常验证一样。但事情是因为视图组件可以集成到各种各样的地方,我如何找到表单帖子的来源?
我想呈现用户用于再次输入其凭据的同一站点,只有验证错误。有没有办法找出表单帖子来自哪个View?或者更好的是有没有标准的方法来处理窗体作为ASP.NET Core MVC中的视图组件?
答案 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
}
}