如何在导航栏中插入模式登录表单

时间:2019-01-18 14:07:50

标签: asp.net razor asp.net-core razor-pages asp.net-core-2.2

我正在建立一个新网站,其中一项要求是使登录表单成为模式窗口。

我试图将其包含在顶部导航栏中,并且仅当用户未登录时才呈现它。

如果我删除模型并让一个空的模态一切正常,但是当我再次添加它时,它不起作用,因为页面的模型(在本例中是索引页面)是一个与之不同的模型。模式登录。

如何在顶部导航栏中的模型上添加此模式窗口?有其他选择吗?

P.S。我正在使用Razor Pages和ASP.NET Core 2.2。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要使用视图组件:

public class LoginViewComponent : ViewComponent
{
    public async Task<IViewComponentResult> InvokeAsync()
    {
        var model = await GetModelAsync();
        return View(model);
    }

    public Task<LoginViewModel> GetModelAsync() =>
        Task.FromResult(new LoginViewModel());
}

然后,创建视图Views\Shared\Components\Login\Default.cshtml并在其中添加您的登录表单代码。最后,在您希望登录表单位于的布局中:

@await Component.InvokeAsync("Login")

您需要一个可以响应表单发布的页面或处理程序。您不能发布到视图组件。那只是以一种可包含的自包含方式使用其自己的模型呈现局部视图。您应该在登录表单中为“返回URL”输入一个隐藏的输入,并用Request.Path填充。然后,成功登录后,将用户重定向回该URL。这样,登录将是无缝的,就像他们永远不会让他们进入的页面一样。

失败时,您应该像通常一样简单地重新显示登录表单。只需将其作为视图返回将更容易,更无缝。这样,您可以搭载登录页面的内置帖子处理程序。再次,只需添加您的返回URL字段,并用请求中的返回URL填充它,以便用户最终将其返回到开始登录过程时最初位于的页面。