Asp.net Core 6.0 之动态修改Cshtml(发布篇)

昨天写了一篇动态修改Cshtml的,不过那是在开发环境下,用IIS_Express或独立进程的方式。但最终发布到IIS,该如何更新呢?

这个不得不说是遇到一个巨大的坑了。

首先在网上查,似乎也很简单,就是在Startup.cs里的ConfigureServices()方法里加上
            services.AddRazorPages().AddRazorRuntimeCompilation(); 包括最新的官网上都是这样写的,参见ASP.NET Core 中的 Razor 文件编译 | Microsoft Docs

另外,还要将FolderProfile.pubxml里的预编译设为False,

 <RazorCompileOnBuild>false</RazorCompileOnBuild>
    <RazorCompileOnPublish>false</RazorCompileOnPublish>

我照做了,发布后却感觉有点不对劲:

1.如果不设为false,在发布目录下并没有生成XXXX.View.dll,只有一个XXXX.dll,我修改了一个Cshtml,发布到另一个目录,只将XXXX.dll更新到站点下,页面就更新了,说明Cshtml被编译到这个dll里了。

2.如果设为false,确实发布后有View目录了,但访问网站却直接报错了,说找不到内容。感觉根本没有执行AddRazorRuntimeCompilation()这个方法。

我仔细回忆了一下,这个startup.cs文件 在创建项目之初并不存在,是我手工添加的,难道是最新版本又有变化?再查了下项目的启动次序

 https://www.cnblogs.com/whuanle/p/10095209.html

到progarm.cs里看了下,里面有个builder.Services.AddControllersWithViews(),我加上了启用动态编译的方法:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews().AddRazorRuntimeCompilation();
var app = builder.Build();

再发布后,这次打开页面用了很长的时间,估计有戏了,应该是在动态编译。页面能打开了。试着改了下Cshtml,再刷新下页面,能看到更新了!

总结:应该是最新版本6.0做了启动方法的整合,弃用了Startup.cs,启动时的服务设置放到了Program.cs中,但是文档即没有更新....

建议:在学习Asp.net 6.0之前,建议先看下差异ASP.NET Core 6.0 的新增功能 | Microsoft Docs

因为其它地方的文档还没有更新,看这里就能理解为什么没有XXXXX.View.dll了

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我理解你的要求了。基于ASP.Net Core 6.0 Razor Pages,我们可以简单地创建一个包含两个表单按钮且能够跳转到不同页面的Web应用程序。下面是具体的步骤: 首先,打开Visual Studio 2022或更高版本,创建一个新的ASP.Net Core Web应用程序项目并选择Razor Pages模板。在创建项目时,需要选择.NET 6.0作为目标框架。在创建完毕后,打开Pages目录下的Index.cshtml文件,添加以下代码: ```html <form method="post"> <button name="page" value="page1">打开Page1</button> <button name="page" value="page2">打开Page2</button> </form> ``` 上面的代码创建了两个表单按钮,并为它们分别设置了名称和值。当用户点击其中一个按钮时,它们将以POST方式提交表单,并且会在请求正文中包含一个名为“page”的参数,该参数的值为用户选择的页面名称(page1或page2)。 接下来,在Index.cshtml.cs文件中添加以下代码: ```csharp public IActionResult OnPost(string page) { if (page == "page1") { return RedirectToPage("Page1"); } else if (page == "page2") { return RedirectToPage("Page2"); } else { return Page(); } } ``` 这段代码处理了POST请求,并根据用户选择的页面名称重定向到相应的页面。如果用户没有选择任何页面或选择的页面名称不正确,则仍然呈现当前页面。 最后,在Pages目录下创建两个新的Razor PagePage1.cshtmlPage2.cshtml。这些页面可以使用Razor语法和HTML/CSS/JavaScript来自定义。例如,在Page1.cshtml文件中添加以下代码: ```html <h1>Page 1</h1> <p>欢迎来到Page 1!</p> ``` 在Page2.cshtml文件中添加以下代码: ```html <h1>Page 2</h1> <p>欢迎来到Page 2!</p> ``` 现在,我们已经创建了一个包含两个表单按钮的ASP.Net Core 6.0 Razor Pages Web应用程序,并且可以在用户点击按钮后分别打开Page1和Page2。当然,你可以根据自己的需求自定义更多的页面和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值