我正在创建我的网站时遇到问题。试图调试它,我注意到当我点击F5运行该网站时,它一直在创建一个创建的管理器之上创建网站,并一直反复调用操作方法,最终firefox最终吃了所有的CPU 。我注意到这是代码:
Layout = "~/Views/Shared/_Layout.cshtml";
导致它。如果我从View中删除此代码,它可以正常工作。知道可能是什么问题吗?
我的观点如下:
@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();
}
}
}
Index方法被一遍又一遍地调用,似乎在一个永恒的循环中返回。在调试它时,我一直按下F10(跳过)5分钟,并意识到它只是重新创建页面,但在较旧的页面之上,所以它最终复制了网站
我还尝试从视图中删除:Layout = "~/Views/Shared/_Layout.cshtml";
,以便它们只驻留在:_ViewStart.cshtml
但没有运气
initGUI脚本如下所示:
function initUI() {
$(".topMenu").tabs();
$("#logoDiv").toggle("slide", { direction: 'left' }, 2000);
$("#decorPNG").mouseover(function () {
$(this).css("cursor", "pointer");
$(this).draggable({ axis: 'y', containment: "#decor" });
});
}
答案 0 :(得分:2)
您的问题在这里:
<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>
使用jQueryUI选项卡时,它使用锚标记将内容加载到该选项卡中,然后在单击时显示内容。您的问题是Home
控制器Index
操作位于您的菜单中,而默认项目则是递归循环。
如果您真的想使用jQueryUI选项卡,那么您应该禁用当前页面的href ActionLink
。或者,您应为PartialViews
呈现ActionLinks
,并使用您的主页/索引作为容器。然后你的应用程序将更像SPA(单页面应用程序)。
根据您的目标,以下是两种可能的解决方案: 实现我认为您正在寻找使用jQuery UI的一种方法。将您的索引操作和查看复制到另一个名称,例如&#34;默认&#34;。然后更改该操作和所有其他操作以返回PartialViews。
public PartialViewResult Default()
{
// do stuff
return PartialView();
}
然后删除您不想在所有页面上显示的索引操作中的任何代码。现在这将是您的容器,然后您的选项卡将呈现所有这些页面的部分视图。您的PartialView
将呈现与之前完全相同的代码,但不会显示_Layout.cs
文件。这些仍将使用ActionLink
文件中的.cshtml
方法。
第二种方法是使用Bootstrap Tabs。这就是CSS方法,你可以添加css类&#34; active&#34;基于活动页面,不对ActionResults进行任何更改。