2016-09-15 5 views
0

外部から来る条件に応じて、PartialViewまたはViewのいずれかからレンダリングしようとしています。 WebサイトがStackOverflowExceptionでデータをポストすると失敗します。コントローラからの部分ビューまたはビューのレンダリング

コントローラコード:

public ActionResult Login(bool partial = false) 
    { 
     if (partial) 
     { 
      ViewBag.Partial = true; 
      return PartialView(); 
     } 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Login(UserViewModel userViewModel) 
    { 
     if (!ModelState.IsValid) 
      return View(userViewModel); 
     // some authrorization staff 
    } 

Login.cshtml:

@using SK.DDP.ImageGallery.Helpers 
    @model SK.DDP.ViewModels.UserViewModel 

    @{ 
     ViewBag.Title = "Login"; 
     if (ViewBag.Partial != null) 
     { 
      Layout = string.Empty; 
     } 
    } 

    @*Some form staff*@ 

AuthorizationInfo.cshtml:

@{ 
     Layout = string.Empty; 
    } 

    @{ Html.RenderAction("Login", "Authorization"); } 

テンプレート:

@*Some dif for form requested by menu*@ 
    @{ Html.RenderAction("AuthorizationInfo", "Authorization"); } 

ユーザーがメニューをクリックしたときにログインページとログインポップアップウィンドウが表示されるWebサイトがあるので、コントローラとコードの同じアクションを再利用したかったので、アプリケーションはstackoverflow例外で失敗し続けます。

ありがとうございました。

+1

「AuthorizationInfo.cshtml」とテンプレートは質問にどのように関連していますか?ビュー内に 'if(ViewBag.Partial!= null)'は必要ありません(レイアウトを使用しないPartialViewを返した場合) –

+1

返されたactionresultがあった場合、Layout = string.Emptyを設定する必要はありません部分的に、これを確認できますか? – Monah

+1

スタックオーバーフロー例外?いくつかの再帰呼び出しを探します。それを自分のことと呼んでいる行動方法かもしれない? – Shyju

答えて

0

Razorエンジンにバグがあります。

私はそれを回避しました。

AuthorizationInfo.cshtml

@{ Html.RenderAction("LoginPartial"); } 

AuthorizationController.cs

public ActionResult Login() 
{ 
    return View(); 
} 

public ActionResult LoginPartial() 
{ 
    ViewBag.Partial = true; 
    return PartialView("Login"); 
} 

フォームの今ポストは、再帰的に適用されるテンプレートとオーバーフローを発生しません。

+2

「Razor engine」にはバグはありません。 ! –

関連する問題