【问题标题】:Aspx page in MVC3MVC3 中的 Aspx 页面
【发布时间】:2018-10-26 09:28:08
【问题描述】:

我正在使用 Visual Studio 2010 开发 MVC3 应用程序。

我有一个 aspx 页面,我想通过控制器操作来显示它。

我将此操作添加到家庭控制器。

// GET: /Home/EmployeePortal
        public ActionResult EmployeePortal()
        {
            return View();
        }

这是 aspx 页面。

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<!DOCTYPE html>

<html>
<head runat="server">
    <title>EmployeePortal</title>
</head>
<body>
     <asp:TextBox ID="TextBox1" runat="server" />
    <div>
        This is employee portal
    </div>
</body>
</html>

当我运行应用程序时,我可以使用 url 导航到此页面: http://localhost:3990/Home/EmployeePortal

问题是 - 当我在 aspx 页面上有一个或多个服务器端控件时,我在网站上收到此错误。 抱歉,处理您的请求时出现了一个错误。

当我从页面注释掉服务器端控件时,它显示正常。

通过添加新视图菜单将 aspx 页面作为视图添加到应用程序。

我需要一个集成到 MVC 应用程序中的 aspx 页面,这就是我尝试使用这个 aspx 页面的原因。

我不确定我做错了什么。请帮忙。

【问题讨论】:

  • 如果您必须拥有带有传统服务器控件等的单个 aspx 页面,您为什么要使用 MVC?
  • MVC 的全部意义在于您没有服务器端控件。在这里阅读beta.asp.net/mvc

标签: asp.net-mvc


【解决方案1】:

您不使用 ASP.net MVC 中的服务器端控件。

您使用 HTML Helper 方法:

<%= Html.TextBox("TextBox1") %>

MVC 不支持服务器端控件,因为 MVC 没有 ViewState 的概念。

编辑:

如果您需要集成 MVC 和 WebForms,那么您将需要创建独立的 Web Form 页面。这些将不是 MVC 应用程序中的“视图”。然后,您可以通过在 Global.asax 中执行以下操作来创建到这些 Web 表单页面的路由:

public static void RegisterRoutes(RouteCollection routes) {
    routes.MapPageRoute(
        "WebFormProducts",
        "/products/{category}",
        "~/WebForms/Products.aspx"
    );
}

现在,当您转到 /products/beverages 时,它实际上会转到位于 WebForms 文件夹中的 Products.aspx 页面。

您创建此 Products.aspx 文件的方式与创建普通 Web 表单页面相同。这样做的缺点(如果没有任何改变)是您不能共享母版页/布局页面,因此您必须复制任何布局并创建一个 .master 以使页面看起来相似。

【讨论】:

  • 我需要将一些旧的 aspx 页面集成到新应用程序中。这就是我尝试包含服务器端控件的原因。
  • 我尝试了您在更新后的帖子中提到的步骤。添加了路线图和页面。我没有产品控制器,因此收到 http 404 错误。我会继续尝试一些事情。
  • 确保您的页面路由出现在默认路由之前,否则您的默认路由将优先。
  • 再次感谢您的及时回复。这就是我的 RegisterRoutes 方法的样子: routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapPageRoute("WebFormProducts", "Home/EmployeePortal", "~/Webforms/Products.aspx"); routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{id}", // 带参数的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值 );问题是 - 现在我的所有操作都被路由到 products.aspx 虚拟页面。我该如何解决这个问题?
  • 我已经有一段时间没有这样做了,但是如果我没记错的话(这是一个延伸),但我认为我在使用没有一些可配置部分的页面路由时遇到了麻烦。我的意思是,当我这样做时我无法让它工作:/products/beverages 但是当我做 /products/{category} 时它确实有效。尝试更改路由以通过 {} 传入某些内容。 might 工作,但我不确定这是否是问题。
【解决方案2】:

在 mvc 控制器上使用 aspx 页面进行 rdlc 视图的简单方法

public ActionResult RdlcReport( )
{
    IHttpHandler page = (IHttpHandler)System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath("~/Report/ReportDataViewer.aspx", typeof(Page));
    HttpApplication controllerContextHttpContextGetService = (HttpApplication)ControllerContext.HttpContext.GetService(typeof(HttpApplication));
    page.ProcessRequest(controllerContextHttpContextGetService.Context);
    return new EmptyResult();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    相关资源
    最近更新 更多