2013-10-25 55 views
0

背景: 我在現有的Web表單現場工作,我們正在轉換爲MVC 4,我們還更新了UI都制定了新的MVC佈局頁,以取代舊的WebForms母版頁面。我們無法將所有aspx頁面一次升級到mvc,因此爲了保持網站的一致外觀,尚未轉換的現有aspx將在MVC佈局內呈現。我們使用MVC路由將〜/ pageName.aspx之類的URL發送給一個MVC控制器(具有相應的視圖),該MVC控制器使用Server.Execute獲取要呈現到MVC布​​局中的aspx主體。到目前爲止它工作正常。會話狀態的混合Web表單/ MVC應用

問題: 在現有aspx代碼背後的幾個地方有一些SessionState項目被設置。出於某種原因,我無法發現頁面重定向時(即它再次通過MVC控制器),sessionState爲空。什麼會導致這/我在哪裏可以解決我的問題?會話變量的設置示例如下。

的.aspx

<asp:UpdatePanel ID="SignaturesUpdatePanel" runat="server"> 
    <ContentTemplate> 
     <div> 
      Signatures for your login are <asp:Literal ID="SignaturesStatusLiteral" runat="server" />.<br /> 
      <asp:LinkButton ID="SignaturesButton" Text="Turn signatures off temporarily" runat="server" OnClick="SignaturesButton_Click" /> 
     </div> 
    </ContentTemplate> 
</asp:UpdatePanel> 

.aspx.cs

protected void SignaturesButton_Click(object sender, EventArgs e) 
{ 
    var signaturesDisabled = Session["SignaturesDisabled"]; 
    bool disabled = signaturesDisabled == null || !bool.Parse(signaturesDisabled.ToString()); 
    Session["SignaturesDisabled"] = disabled; 

    if (disabled) 
    { 
     SignaturesButton.Text = "Turn signatures on"; 
     SignaturesStatusLiteral.Text = "off"; 
    } 
    else 
    { 
     SignaturesButton.Text = "Turn signatures off temporarily"; 
     SignaturesStatusLiteral.Text = "on"; 
    } 
} 

顯然之前,我與使用MVC控制器工作這一切工作正常(即當它是所有隻是運行作爲沒有MVC參與的原始WebForms應用程序)。另外,作爲一個測試,我嘗試在控制器動作方法中設置一個會話變量,然後在.aspx.cs文件中檢索它工作正常,所以我想在通過MVC路由時必須有一些清除會話。

的完整性這裏是有關路由映射

routes.MapRoute(
    name: "Project File Pages", 
    url: "{page}.aspx", 
    defaults: new { controller = "Legacy", action = "ProjectFileLayout" }, 
    constraints: new { file = new QueryStringConstraint() } 
); 

和(下調)MVC控制器操作方法

public ActionResult ProjectFileLayout(int file) 
{ 
    var url = GetCurrentPageUrl(); 
    var sw = new StringWriter(); 
    Server.Execute(url, sw, true); 

    ... 

    var model = new LegacyViewModel 
    { 
     Body = sw.ToString(), 
     ... 
    }; 
    return View(model); 
} 

如果您需要了解更多信息或我沒有足夠清楚我的問題, 請告訴我!

+0

噢,是的,忘了提及我想盡量保留原始代碼 - 我希望能通過設置MVC(或者在控制器等)來解決這個問題,而不是改變它aspx和相關代碼如何工作。 – Bindi

回答

0

通過調查我遇到的另一個問題,我現在發現它是UpdatePanel的責任。該頁面由於updatePanel而重新加載,並且由於路由,MVC控制器操作會將其啓動。這會導致整個頁面被重新渲染,而不僅僅是原生webforms中發生的updatePanel。

解決方法我打算做另一個路由映射來收集具有相應頭部細節的東西,然後發送updatePanel字符串以進行渲染....希望應該爲我的問題創造奇蹟!