MVC Contrôleur de l'Action est Appelée Plusieurs Fois Lors de la Mise en page Est Spécifié
Je vais avoir un problème où l'action d'un contrôleur est appelé au moins deux fois. J'ai une vue qui a un autre point de vue que sa mise en page de la page, et la vue est appelée plusieurs fois. Si j'ai retirer le cahier des charges pour la mise en page alors l'action est systématiquement exécuté une seule fois. J'ai regardé à travers StackOverflow et d'autres sites, mais ne pouvait pas trouver un problème qui avaient les mêmes caractéristiques que la mienne, donc je suis de poster une nouvelle question.
_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();
}
Il semble comme un simple problème et je vais certainement manquer quelque chose d'évident. J'ai posté l'exemple de projet sur ce site: https://skydrive.live.com/#cid=F2DAB940147490B0&id=F2DAB940147490B0%21140
Toutes les idées ce qui est faux?
Grâce
Mise à jour: Voici le point de vue:
@{
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>
et voici le pied de page:
<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>
Mise à jour:
@Tieson T: Merci, j'ai changé de ce Html.Partielle au lieu de RenderPage. Toutefois le problème persiste, comme la méthode d'action devient encore appelée deux fois... (Édition de description car je n'ai pas de privilèges pour ajouter des commentaires)
Je viens de mettre à jour la description et a ajouté cette information maintenant
OriginalL'auteur user1717575 | 2012-12-23
Vous devez vous connecter pour publier un commentaire.
J'ai compris le problème. Il y a cette ligne dans le code:
La
src
allait revenir à la même page. Une fois que j'ai remplacer par un""
il fonctionne très bien maintenant.wow, wow, wow. quel PIA qui a été. dans mon cas, quelqu'un avait incorporé des dizaines de ces tout au long de la base de code; copier/coller sans aucun doute. cela n'aurait jamais eu lieu pour moi. c'est marrant parce que le navigateur ne charge que chaque ressource une fois que le problème était masqué; si elle avait été de 10 appels, il aurait été beaucoup moins subtil et plus détectable. merci pour l'affichage de vos résultats!!
OriginalL'auteur user1717575
J'ai également fait face à un même problème. L'Action a été rendu à deux reprises.
Le seul problème était avec
Ne sais pas pour quelle raison attribut src de l'image était à l'origine pour effectuer le rendu deux fois sur la page.
Je viens de le changer en ""`
et il fonctionne très bien maintenant.
<iframe src="#" ></iframe>
peuvent avoir ce problèmeOriginalL'auteur OyeHarish
Depuis votre
_Footer.cshtml
point de vue est juste un bon vieux HTML, il n'y a absolument aucune raison de l'appeler@RenderPage()
pour l'insérer dans votre mise en page. Utilisation@Html.Partial()
à la place:Honnêtement, je ne sais pas pour vous, pourquoi la mise en page est appelé deux fois, mais je suppose
@RenderPage()
(dont je n'ai jamais eu besoin) rend l'ensemble d'une page HTML et injecte les résultats. Vous devez vérifier la source de la page dans votre navigateur pour confirmer.HTH.
OriginalL'auteur Tieson T.
@Url.Contenu(...) est à l'origine du modèle pour avoir appelé deux fois pour moi. Peut-être quelques autres question
OriginalL'auteur Mike