2016-09-15 144 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"); } 

我有一個網站,當用戶點擊菜單時出現登錄頁面和登錄彈出窗口,所以我想重複使用控制器和代碼的相同動作,並且應用程序繼續失敗,出現stackoverflow異常。

謝謝。

+1

'AuthorizationInfo.cshtml'和Template如何與問題相關?並且您不需要在視圖中使用if(ViewBag.Partial!= null)'(返回不使用佈局的PartialView) –

+1

如果返回的actionresult是不需要設置Layout = string.Empty部分,你能證實這一點嗎? – Monah

+1

堆棧溢出異常?尋找一些遞歸調用。可能是一種行爲方法不斷地稱它爲自我? – Shyju

回答

0

似乎它是一個剃刀引擎中的錯誤。

我改變了它。

AuthorizationInfo.cshtml

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

AuthorizationController.cs

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

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

現在的形式後不會產生與重複應用模板溢出。

+2

'剃刀引擎'沒有錯誤, ! –