C# 控制器中的操作方法被永久调用
我的网站有问题,我正在创建。试着调试它时,我注意到当我点击F5运行该站点时,它会在前面创建的站点上不断创建该站点,并不断反复调用动作方法,最终firefox会吃掉所有的CPU。我注意到这是一个代码:C# 控制器中的操作方法被永久调用,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我的网站有问题,我正在创建。试着调试它时,我注意到当我点击F5运行该站点时,它会在前面创建的站点上不断创建该站点,并不断反复调用动作方法,最终firefox会吃掉所有的CPU。我注意到这是一个代码: Layout = "~/Views/Shared/_Layout.cshtml"; 这就是原因。如果我从视图中删除此代码,它就可以正常工作。知道有什么问题吗 我的观点是这样的: @model WebApplication1.Models.IndexViewModel @{ View
Layout = "~/Views/Shared/_Layout.cshtml";
这就是原因。如果我从视图中删除此代码,它就可以正常工作。知道有什么问题吗
我的观点是这样的:
@model WebApplication1.Models.IndexViewModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="pageContentDiv">
<h2>@ViewBag.Title</h2>
<p>Lorem</p>
</div>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<link href="~/Scripts/jquery-ui.min.css" rel="stylesheet" />
<script src="~/Scripts/jquery-ui.min.js"></script>
<script src="~/Scripts/OwnedScripts/InitializeUI.js"></script>
<script type="text/javascript">
$(document).ready(function () {
initUI();
});
</script>
</head>
<body>
<div class="topMenu">
<div id="topMenuContentDiv" style="margin-left: 110px;">
<ul>
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("Roads", "Recs", "Home")</li>
<li>@Html.ActionLink("Software", "Software", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</div>
</div>
<div class="contentDiv" id="#contentDiv">
<div id="decor" style="height: 640px; float: right;">
<div id="decorPNG" style="background-image: url('../Images/VisualImages/decor.png'); width: 300px; height: 64px;
float: right; margin-right: -20px; margin-top: 100px;">
</div>
</div>
<div id="logoDiv">
<h1>QitozNet</h1>
</div>
@RenderBody()
<footer class="footer">
<p>© @DateTime.Now.Year - All rights reserved</p>
<hr />
</footer>
</div>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Recs()
{
return View();
}
public ActionResult About()
{
ViewBag.Message = "Temp";
return View();
}
public ActionResult Software()
{
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
}
function initUI() {
$(".topMenu").tabs();
$("#logoDiv").toggle("slide", { direction: 'left' }, 2000);
$("#decorPNG").mouseover(function () {
$(this).css("cursor", "pointer");
$(this).draggable({ axis: 'y', containment: "#decor" });
});
}
索引方法一次又一次地被调用,似乎以一个永恒的循环返回。调试它时,我一直按F10键5分钟,意识到它只是在重新创建页面,但在旧页面的基础上,所以它最终复制了站点
我还尝试删除:Layout=“~/Views/Shared/\u Layout.cshtml”从视图中选择code>,以便它们只驻留在:\u ViewStart.cshtml
中,但不存在任何错误
initGUI脚本如下所示:
@model WebApplication1.Models.IndexViewModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="pageContentDiv">
<h2>@ViewBag.Title</h2>
<p>Lorem</p>
</div>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - My ASP.NET Application</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<link href="~/Scripts/jquery-ui.min.css" rel="stylesheet" />
<script src="~/Scripts/jquery-ui.min.js"></script>
<script src="~/Scripts/OwnedScripts/InitializeUI.js"></script>
<script type="text/javascript">
$(document).ready(function () {
initUI();
});
</script>
</head>
<body>
<div class="topMenu">
<div id="topMenuContentDiv" style="margin-left: 110px;">
<ul>
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("Roads", "Recs", "Home")</li>
<li>@Html.ActionLink("Software", "Software", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</div>
</div>
<div class="contentDiv" id="#contentDiv">
<div id="decor" style="height: 640px; float: right;">
<div id="decorPNG" style="background-image: url('../Images/VisualImages/decor.png'); width: 300px; height: 64px;
float: right; margin-right: -20px; margin-top: 100px;">
</div>
</div>
<div id="logoDiv">
<h1>QitozNet</h1>
</div>
@RenderBody()
<footer class="footer">
<p>© @DateTime.Now.Year - All rights reserved</p>
<hr />
</footer>
</div>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Recs()
{
return View();
}
public ActionResult About()
{
ViewBag.Message = "Temp";
return View();
}
public ActionResult Software()
{
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
}
function initUI() {
$(".topMenu").tabs();
$("#logoDiv").toggle("slide", { direction: 'left' }, 2000);
$("#decorPNG").mouseover(function () {
$(this).css("cursor", "pointer");
$(this).draggable({ axis: 'y', containment: "#decor" });
});
}
你的问题在这里:
<div class="topMenu">
<div id="topMenuContentDiv" style="margin-left: 110px;">
<ul>
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("Roads", "Recs", "Home")</li>
<li>@Html.ActionLink("Software", "Software", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</div>
</div>
然后删除索引操作中不希望在所有页面上显示的任何代码。这将是您的容器,然后您的选项卡将呈现所有这些页面的部分视图。您的PartialView
将呈现与以前相同的精确代码,但没有\u Layout.cs
文件。它们仍将使用.cshtml
文件中的ActionLink
方法
第二种方法是使用。这就是CSS方法,您可以在活动页面的基础上添加CSS类“active”,而无需对ActionResults进行任何更改。这是initUI()中刷新页面或单击操作链接的代码吗?因此,当您删除Layout=“~/Views/Shared/_Layout.cshtml”时,它可以正常工作;在你看来?但你为什么要写这行?最后,即使不写那一行,你也必须得到那个视图?这段代码是做什么的?InitUI()函数$ready(函数(){initUI();});你是对的。导致问题的代码是JS代码。就是这部分:$(“.topMenu”).tabs();我在元素上添加了Jquery的.tabs()方法。为什么这与 @Html.ActionLink?你的应用程序中一定有其他代码导致了此问题,如果上面是你的真实代码,那么应该可以使用fibe,你有任何操作过滤器吗?我将尝试禁用当前页面的href ActionLink。但是如果我这样做了,那么我如何使它能够调用属于该href的Action方法呢?如果禁用ActionLink,我必须手动处理此问题。做但是这里显然存在一个问题,因为我无法联系控制器类,也无法在其中找到合适的操作方法。我无法在ActionLink上使用JQuery的.tabs(),这确实让我感到困扰。如果有人遇到过同样的问题,并且找到了其他东西来获得良好的选项卡外观,而不需要编写太多代码,请分享:-)您可以使用JQuery的.tabs()
和ActionLink()
。如果你得到一个无止境的循环,问题就出在别的地方。通常,它是在某个地方使用@Html.Action()
而不是@Html.ActionLink()
或@Url.Action()
(@Html.Action()
调用控制器上的方法以返回视图也将包含@Html.Action()
,后者反过来再次调用它,依此类推)Stephen-无休止的循环是因为主页是Home/Index,其中包含一个Home/Index选项卡,它再次呈现包含所有选项卡的整个页面…等等。user1960836-为您提供了两种可能的解决方案。