MVC 5升级打破Default.aspx页面回发

时间:2014-05-01 22:35:03

标签: c# html asp.net asp.net-mvc visual-studio

我有一个托管Web窗体和MVC的Visual Studio解决方案。我最近将解决方案中的所有项目文件升级到MVC 5.这打破了名为“default.aspx”的页面的所有回发,因为在MVC 5中如何处理form标签的action属性(default.aspx页面返回一个空字符串for动作和回发失败)。 See this articlethis 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页面。

如果不再继续下去,我现在有两个选择:

  1. 进入每个default.aspx页面并手动设置操作属性。
  2. 创建父页面,手动设置action属性,并使每个default.aspx页面都继承该页面。
  3. 这些解决方案并不理想。我注意到如果我创建一个新的ASP.NET Web应用程序项目并使用Web窗体模板,则default.aspx页面没有问题。

    使用空操作属性可以做些什么来解决这个问题?

1 个答案:

答案 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...
    }
}