如何完全自定义默认的ASP .Net Core身份页面?

时间:2019-01-09 01:29:20

标签: asp.net-mvc asp.net-core model asp.net-identity asp.net-core-identity

我目前正在尝试学习和理解.Net Core 2.1 / MVC的所有新身份标识。以前,我使用过MVC3 MVC Identity,这很简单-它会自动创建模型,视图和控制器,并且我可以轻松地编辑所有内容。

使用.Net Core,它似乎会自动从框架继承所有内容,而我只是不容易理解如何重写。

我已经按照located here的指南进行操作,并设法对所有页面进行了脚手架(例如,创建用户,重设密码,登录),但是,这不会创建任何模型或控制器。

因此,我现在有一个包含所有页面的项目,但是,由于缺少所有模型而无法构建:

[Output/Models missing]

CS0246  The type or namespace name 'ChangePasswordModel' could not be found (are you missing a using directive or an assembly reference?

我觉得我缺少明显的东西,我不敢相信我在〜10年前很简单的东西上苦苦挣扎。

如何创建/导入缺少的控制器和模型?

1 个答案:

答案 0 :(得分:0)

身份带有默认界面,该界面由Razor页面和Razor类库中的静态文件组成。当您使用AddDefaultIdentity在项目中启用Identity或在任何其他Identity自举扩展方法(AddDefaultUI / AddIdentity上显式调用AddIdentityCore时,默认情况下会添加它。

Razor类库中的视图和静态文件是嵌入式资源,因此,就好像它们物理上直接存在于引用它们的应用程序中一样。但是,任何嵌入式资源之前,都将使用您应用中实际存在的任何东西。这样,只需在与应用程序RCL中存在的文件相同的位置创建相同的文件,就可以覆盖来自RCL的所有内容。身份支架只是将选定的Razor页面上的内容复制到您的项目中,这样它们将以这种方式覆盖。

由于Razor页面用于默认UI,因此没有控制器或单独的模型类。用于视图的模型是在“剃刀页面”代码的后面建立的,因此对于脚手架进入的每个页面,应该同时添加Page.cshtmlPage.cshtml.cs文件。

如果构建完支架后构建失败,则构建看不到*.cshtml.cs文件(代码隐藏)。验证它们确实存在于您项目的文件结构中。如果不这样做,则您的Visual Studio实例中的支架存在一些基本问题,可能需要重新安装或至少修复Visual Studio。

假设它们在那里,那么在构建过程中会遇到一些困难。有时文件确实被锁定,Visual Studio会抱怨它缺少引用,而实际上却只是丢失了来自这些引用的程序集。在这种情况下,您可以直接导航到项目并完全删除binobj目录。然后,回到Visual Studio中并进行重建。如果您有多个项目,则应重新构建整个解决方案,因为它可能是实际上无法构建的项目参考。