我有一个托管Web窗体和MVC的Visual Studio解决方案。我最近将解决方案中的所有项目文件升级到MVC 5.这打破了名为“default.aspx”的页面的所有回发,因为在MVC 5中如何处理form标签的action属性(default.aspx页面返回一个空字符串for动作和回发失败)。 See this article和this forum question。
我的问题是我有多个MVC视图路由到以“/”或单词结尾的URL。例如“mysite.com/about/”或“mysite.com/about”。我不能使用解决方案answered here,因为它也会影响MVC路由(我试过它并且MVC视图不会渲染)。我找到的唯一解决方案是手动进入每个default.aspx页面并使用以下代码:
protected void Page_Init(object sender, EventArgs e)
{
((HtmlForm)((MyMasterPage)Page.Master)FindControl("form1")).Action = "Default.aspx";
}
请注意,我无法在母版页中设置action属性,因为它会影响所有非default.aspx页面。
如果不再继续下去,我现在有两个选择:
这些解决方案并不理想。我注意到如果我创建一个新的ASP.NET Web应用程序项目并使用Web窗体模板,则default.aspx页面没有问题。
使用空操作属性可以做些什么来解决这个问题?
答案 0 :(得分:0)
我知道它不是我想要的,但我最终在母版页中使用PreInit事件处理程序来处理default.aspx页面。
protected void Page_PreInit(object sender, EventArgs e)
{
try
{
var masterPage = Page.Master as MasterPages.Toolbox;
if (masterPage != null)
{
var form = masterPage.FindControl("form1") as HtmlForm;
if (form != null)
{
if (string.IsNullOrEmpty(form.Action))
{
if (string.IsNullOrEmpty(Request.Url.Query))
{
form.Action = "default.aspx";
}
else
{
form.Action = "default.aspx" + Request.Url.Query;
}
}
}
}
}
catch (Exception exception)
{
// Handle exception...
}
}