我正在开发一个关于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的新成员。
答案 0 :(得分:2)
从不,永远不要将模型附加到布局。只是不要。这里正确的方法是视图组件。创建一个ViewComponents
目录并添加类似SignUpViewComponent.cs
的类文件。在该文件中,您需要以下内容:
public class SignUpViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
// set up your model
return View(model);
}
}
查看组件支持注入,因此您可以遵循传统的DI模式,即使用要注入的参数添加构造函数,并使用这些值在类上设置私有字段。如果您需要利用它来构建模型,这可以让您轻松引入类似上下文的内容。
然后,创建视图Views\Shared\Components\SignUp\Default.cshtml
。在该文件中,您可以根据需要将模型设置为您的注册表单模型,然后使用该模型添加您的注册表单HTML。
最后,在您的布局中,将以下行添加到您希望显示注册表单的位置:
@await Component.InvokeAsync("SignUp")
有关视图组件的更多信息,请参阅documentation。