我已经修改了 Dot Net Core 应用程序中的 map 路线,每个请求都会发送到一个 Controller ,因此我们构建的每个页面都不需要大量 Controller 或操作结果。
routes.MapRoute("", "/{*article}",
defaults: new { controller = "Pages", action = "Killme" });
在页面 Controller 中构建一个包含 CSS 和 JavaScript 位置列表的对象,该对象将被传递到页面 View
public IActionResult Killme()
{
var PageInfo = GetPage_Data();
ViewBag.PageInfo = t;
return View("Pages");
}
我尝试将此信息作为模型或 View 包传递到页面 View 。 在页面 View 中,我尝试基于模型动态构建 JavaScript 和 CSS,如
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
@{
RootObject PageInfo = ViewBag.PageInfo;
foreach (var JavaScript in PageInfo.js)
{
var JSsrc = JavaScript.src;
<script type="text/javascript" src="@JSsrc ">
</script>
}
<script type="text/javascript" src=""></script>
</head>
<body>
</body>
</html>
现在的问题是,当我构建 JavaScript 时,当我评论
时, Controller 被调用 2 次,页面被渲染 2 次。 <script type="text/javascript" src="@JSsrc ">
</script>
页面 Controller 将被调用一次, 任何关于为什么会发生这种情况以及我做错了什么的帮助将不胜感激
最佳答案
出现此行为的原因是 staticFileHandler 未配置或无法找到您的 Javascript 文件并将请求进一步传递到管道中。 MVC 处理程序捕获所有请求(由于您的路由)并因此再次返回相同的页面。
首先检查您的启动类是否在 mvcHandler 之前使用 staticFileHandler,因此如下所示:
public class Startup
{
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
..
app.UseMvc();
}
}
其次,确保您的 Javascript 放置在 wwwroot 内并使用正确的路径。因此,像 wwwroot/js/mysite.js 这样的文件应该有一个脚本标记,例如:
<script src="/js/mysite.js"></script>
这些改进应该可以解决您的问题。
关于javascript - Controller 收到每个页面请求 2 个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55889204/