我遇到一个问题,即控制器动作至少被调用两次。我有一个视图,它有另一个视图作为其布局页面,并且视图被多次调用。如果我删除布局的规范,则操作将始终执行一次。我浏览了StackOverflow和其他网站,但找不到与我有相同特征的问题,所以我发布了一个新问题。
_ViewStart.cshtml:
@{
Layout = "~/Views/Shared/_ProfileLayout.cshtml";
}
Index.cshtml inside my Profile folder: @{
ViewBag.Title = "Index";
}
Index
Controller Action:
public ActionResult Index()
{
//ToDo: BusinessLogic
//This method gets called twice
//******************//
return View();
}
这似乎是一个简单的问题,我肯定错过了一些明显的东西。我已在此网站上发布了示例项目:https://skydrive.live.com/#cid=F2DAB940147490B0&id=F2DAB940147490B0%21140
任何想法有什么不对?
由于
更新:这是视图: @ { ViewBag.Title =“TestMVCProject”; Layout = null; }
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>TestMVCProject</title>
<link rel="Stylesheet" type="text/css" href="../../Content/ActiveSite.css" />
<link href="../../Content/themes/TestMVCProject/jquery-ui-1.9.1.custom.min.css" rel="stylesheet" type="text/css" />
<script src="../../Scripts/jquery-1.8.2.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-ui-1.9.1.custom.js" type="text/javascript"></script>
</head>
<body>
<div class="container">
<div class="header">
<div id="loginimagecontainer">
@using (Html.BeginForm("LoginActions", "Account", FormMethod.Post, new { @id = "LoginActionsForm" }))
{
@Html.AntiForgeryToken()
<a href="#"><img src="/images/icons/message-icon.png" width="60" height="60" alt="Messages" title="Messages"/></a>
<a href="/Account/LogOff"><img src="/images/icons/log-out-icon.png" width="60" height="60" alt="Log off" title="Log off"/></a>
}
</div>
<div class="logotext"><img alt="TestMVCProject Logo" src="#" width="350" height="150" id="TestMVCProjectLogo" /></div>
</div>
<div class="content profile">
<div id="leftPane">
<img src="#" alt="Placeholder" width="165" height="200" id="ProfilePhoto" title="Profile Photo" />
<div id="Username"></div>
<div id="NavLinks">
<div class="ProfileNavigation" onclick="Navigate('/Profile/Update')"><span>Profile</span><img src="/images/icons/edit-icon.png" width="30" height="30" alt="Profile" /></div>
<div class="ProfileNavigation"><span>Search</span><img src="/images/icons/search-icon.png" width="30" height="30" alt="Search" /></div>
<div class="ProfileNavigation" onclick="Navigate('/Photo')"><span>Photos</span><img src="/images/icons/camera-icon.png" width="30" height="30" alt="Photos"/></div>
</div>
</div>
<div id="adcontainer">
<h4>Ads go here</h4>
<p>content goes here</p>
</div>
<div id="centerPane">
@RenderBody()
</div>
</div>
@RenderPage("~/Views/Shared/_Footer.cshtml")
<div id="redirectiondialog" class="dialog">
<br />
Hey, wait up... we're redirecting you over to the login page
<br />
</div>
<script type="text/javascript">
function Navigate(url) {
window.location = url;
return false;
}
</script>
</div>
</body>
</html>
这是页脚页面:
<div class="footer">
<div class="fltrt">Copyright 2012 TestMVCProject Inc </div>
<p><a href="/Profile/Test">About</a> | <a href="#">Contact</a> | <a href="#">FAQ</a> | <a href="#">Advertise</a> | <a href="#">Support</a> | <a href="#">Feedback</a> | <a href="#">Login</a> | <a href="#">Register</a> | <a href="#">Privacy</a> | <a href="#">Terms</a></p>
</div>
更新: @Tieson T:谢谢,我把它改为Html.Partial而不是RenderPage。但是问题仍然存在,因为动作方法仍被调用两次...(编辑描述,因为我没有添加注释的权限)
答案 0 :(得分:9)
我弄明白了这个问题。代码中有这一行:
<img alt="TestMVCProject Logo" src="#" width="350" height="150" id="TestMVCProjectLogo" />
src
回到了同一页面。一旦我用""
替换它,它现在可以正常工作。
答案 1 :(得分:3)
我也面临同样的问题。行动呈现了两次。 唯一的问题是
<img id="blah" src="#" alt="your image" />
不知道图像的src属性导致在页面上执行两次渲染的原因是什么。
我刚把它改成了“”`
<img id="blah" src="" alt="your image" />
现在工作正常。
答案 2 :(得分:1)
由于您的_Footer.cshtml
视图只是普通的HTML,因此绝对没有理由要求@RenderPage()
将其插入到您的布局中。请改用@Html.Partial()
:
@Html.Partial("_Footer")
老实说,我不确定为什么布局会被调用两次,但我认为@RenderPage()
(我从来没有需要)渲染整个HTML页面并注入结果。您必须在浏览器中检查页面来源以确认。
HTH。
答案 3 :(得分:1)
@ Url.Content(...)导致模型被我两次调用。也许其他一些问题也是如此
答案 4 :(得分:0)
在提供图像路径时也会发生这种情况,但是该路径上不存在图像。
答案 5 :(得分:0)
如果上面的方法都不能像我一样起作用,请尝试禁用传送带扩展。
这是我的噩梦。
享受...