将单独的模型绑定到主布局



我正在在ASP.NET Core 2.0 MVC上开发Web应用程序,有一个注册模式表格将在所有页面上使用,无法理解我应该如何做用户模型绑定,因为每个页面都有自己的模型。

例如,有一个新闻页面将使用新闻模型,而在该页面上,用户将要注册或登录(主要布局中集成的2个模态表单(。

下面是注册模式的表单部分:

<form action="/Account/RegisterAccount" method="post">
 @Html.AntiForgeryToken()
 <div class="cfield">
     <input name="username" type="text" placeholder="Username" />
 </div>
 <div class="cfield">
     <input name="email" type="text" placeholder="E-mail address" />
 </div>
 <div class="cfield">
     <input name="password" type="password" placeholder="Password" />
 </div>
 <div class="cfield">
     <input type="password" placeholder="Confirm Password" />
 </div>
 <button type="submit">Register</button>
</form>    

我到目前为止所做的只是在没有模型的情况下仅提交表单数据,但是我认为最好找到一种绑定模型的方法,以便我也可以进行模型验证。

另外,如果有人可以给我一个建议,那就是管理登录用户的最佳实践,那将是一个很好的帮助。

这是我在这里的第一篇文章,我在Core和MVC方面是全新的。

从不,从不,永远不要将模型附加到布局上。只是不要。此处的正确方法是视图组件。创建一个ViewComponents目录,然后在其中添加类似SignUpViewComponent.cs的类文件。在该文件中,您需要以下内容:

public class SignUpViewComponent : ViewComponent
{
    public async Task<IViewComponentResult> InvokeAsync()
    {
        // set up your model
        return View(model);
    }
}

查看组件支持注入,因此您可以遵循传统的di模式,即添加一个构造函数,并使用要注入的参数并用这些值将私有字段设置为私有字段。如果您需要利用它来构建模型,这使您可以轻松地引入上下文。

然后,创建视图ViewsSharedComponentsSignUpDefault.cshtml。在该文件中,您可以根据需要将模型设置为注册表单模型,然后使用该模型添加您的注册表格HTML。

最后,在您的布局中,添加以下行,您希望注册表格出现:

@await Component.InvokeAsync("SignUp")

有关查看组件的更多信息,请参阅文档。

最新更新