【问题标题】:MVC 5 Upgrade Breaks Default.aspx Page PostbacksMVC 5 升级中断 Default.aspx 页面回发
【发布时间】:2014-06-18 12:41:40
【问题描述】:

我有一个托管 Web 窗体和 MVC 的 Visual Studio 解决方案。我最近将解决方案中的所有项目文件升级到 MVC 5。这会破坏名为“default.aspx”的页面的所有回发,因为在 MVC 5 中如何处理 form 标记的 action 属性(default.aspx 页面返回一个空字符串动作和回发失败)。 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页面,手动设置action属性。
  2. 创建父页面,手动设置action属性,让每个default.aspx页面都继承自它。

这些解决方案并不理想。我注意到,如果我创建一个新的 ASP.NET Web 应用程序项目并使用 Web 窗体模板,则 default.aspx 页面没有问题。

我还能做些什么来克服空操作属性的这个问题?

【问题讨论】:

  • ...等等,您正在使用带有 WebForms 事件的 MVC? ....
  • a) 为什么不能检查 Action 是否为空,如果为空,则将其设置为默认值,那么它不会影响非默认操作...或 b) 使用您链接到的解决方案中的控制适配器,也不会影响非默认页面,因为操作不会为空?
  • 我没有将 MVC 与 Web 窗体事件一起使用。 Microsoft 正在推广一种 ASP.NET,这意味着您可以使用 Web 窗体、MVC 或两者兼而有之。就我而言,我继承了一个旧的 Web Forms 项目并想使用 MVC,因此除了现有的 Web Forms 之外,我还添加了使用 MVC 所需的所有内容。
  • 你能举一个更好的例子来说明项目的结构吗?即 Default.aspx 所在的文件夹以及您的 Mvc Routes 所在的文件夹?
  • @Erik Funkenbusch 我不能使用表单适配器技术,因为它会影响我的 MVC 页面。我添加了它,格式为 {controller}/{action} 的页面被路由到 {controller}/{action}/default.aspx

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


【解决方案1】:

我知道这不是我想要的,但我最终使用母版页中的 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...
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2013-11-28
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 2014-08-12
    • 2014-02-07
    相关资源
    最近更新 更多