【发布时间】:2014-06-18 12:41:40
【问题描述】:
我有一个托管 Web 窗体和 MVC 的 Visual Studio 解决方案。我最近将解决方案中的所有项目文件升级到 MVC 5。这会破坏名为“default.aspx”的页面的所有回发,因为在 MVC 5 中如何处理 form 标记的 action 属性(default.aspx 页面返回一个空字符串动作和回发失败)。 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 页面。
没有更多的继续,我现在有两个选择:
- 进入每个default.aspx页面,手动设置action属性。
- 创建父页面,手动设置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