背景 我正在处理现有的Webforms站点,我们正在转换为MVC 4.我们也在更新UI,因此正在制作新的MVC Layout页面来替换旧的webforms母版页。我们无法一次将所有aspx页面升级到mvc,因此为了保持站点的一致外观,尚未转换的现有aspx将在MVC布局中呈现。我们使用MVC路由将诸如〜/ pageName.aspx的URL发送到MVC Controller(具有相应的视图),该MVC Controller使用Server.Execute来获取aspx的主体以呈现到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路由时清除会话。 / p>
完整性这里是相关的路线映射
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 :(得分:0)
通过调查我遇到的另一个问题,我现在发现应该责备UpdatePanel。由于updatePanel而重新加载页面,并且由于路由,MVC控制器操作会将其选中。这会导致重新呈现整个页面,而不仅仅是原始webforms中发生的updatePanel。
修复我要进行另一个路由映射以收集具有相应标题详细信息的内容,然后只发送updatePanel字符串以进行渲染....希望能为我的两个问题创造奇迹!