2012-12-23 11 views
7

コントローラアクションが少なくとも2回呼び出されるという問題が発生しています。私はレイアウトページとして別のビューを持っているビューを持っており、ビューは複数回呼び出されます。レイアウトの仕様を削除すると、アクションは一貫して一度だけ実行されます。私はStackOverflowや他のサイトを見ていましたが、私と同じ特徴を持つ問題を見つけることができなかったので、新しい質問を投稿しています。レイアウトが指定されたときにMVCコントローラのアクションが複数回呼び出される

_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" @ 。 レイアウト= 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&nbsp;</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:おかげで、私はRenderPageの代わりにHtml.Partialするために、これを変更しました。しかし、アクションメソッドが2回呼び出されても問題は解決しません。(コメントを追加する権限がないので説明を編集してください)

+0

レイアウトビューはどのように見えますか? –

+0

説明を更新して今すぐこの情報を追加しました – user1717575

答えて

9

問題を見つけました。この行はコードであった:

<img alt="TestMVCProject Logo" src="#" width="350" height="150" id="TestMVCProjectLogo" /> 

srcは、同じページに行きました。私が""に置き換えると、今は正常に動作します。

+0

未回答の質問としてまだ表示されている場合は、これを回答としてマークすることもできます。 –

+0

うわー、うわー、うわー。それは何のPIAでしたか?私の場合、誰かがコードベース全体に数十個のコードを埋め込んでいました。コピー/貼り付けは間違いありません。これは決して私には起こりませんでした。問題が一種隠されるとブラウザが各リソースを読み込むだけなので面白いです。もしそれが10回の呼び出しであったとすると、それほど微妙ではなく、より検出可能であったでしょう。あなたの発見を投稿してくれてありがとう! – user2403744

1

あなたの_Footer.cshtmlビューは単なる古いHTMLですので、絶対に理由はありません@RenderPage()に電話してレイアウトに挿入してください。代わりに@Html.Partial()を使用してください:

@Html.Partial("_Footer") 

レイアウトが2回呼び出され、なぜ私は正直に確かに知っていないが、私は(私は必要性を持っていたことがありません)@RenderPage()は、HTMLページ全体をレンダリングし、結果を注入仮定します。確認するには、ブラウザのページソースを確認する必要があります。

HTH。

3

私も同じ問題に直面しました。アクションは2回レンダリングされました。 唯一の問題は、画像のsrc属性は、ページ上の二回レンダリングを実行するために引き起こしていたどのような理由のために知って

<img id="blah" src="#" alt="your image" /> 

いけないとありました。

私はちょうど "" `

<img id="blah" src="" alt="your image" /> 

にそれを変更し、それが今で正常に動作しています。

+0

'