我正在ASP.NET MVC中创建一个项目,这个想法是创建独立的视图,为此,我创建了一个公用文件夹,并在其中创建了一个WebForm.aspx
,其代码位于{{ 1}}。我已经从NuGet打包器安装了Bootstrap,已经将脚本引用到WebForm中,如下所示:
.aspx.cs
但是当我运行它时,它显示了一个错误:
这是结构:
但是当我从由文件夹组成的Web窗体中运行它时,它可以正常运行。
如何使位于公用文件夹内的aspx起作用?
答案 0 :(得分:2)
HTTP 404页面指示在控制器定义上不存在PublicView
控制器操作方法名称。如果您要将Webforms页面与MVC路由路径样式相关联,例如/Public/PublicView
映射到/Views/Public/PublicView.aspx
而不创建对该页面的控制器操作,MapPageRoute()
方法可能适合您的需求。
只需确保将网络表单路由路径放在默认的MVC路由之前,因为RouteConfig
会从上到下评估路由定义,因此首先评估最具体的路由:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// webforms page route
routes.MapPageRoute(
"PublicView",
"Public/PublicView",
"~/Views/Public/PublicView.aspx"
);
// MVC route
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
如果要使用一个MapPageRoute
映射一个文件夹内的所有ASPX页面,请将其调整为包含页面名称占位符:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// webforms page route
routes.MapPageRoute(
"PublicView",
"Public/{pageName}",
"~/Views/Public/{pageName}.aspx"
);
// MVC route
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
注释:
1)如果要将ASPX页面用作通过控制器操作方法呈现的MVC视图页面,则必须使用Inherits
指令中的System.Web.Mvc.ViewPage
来更改Page
,如下所示:< / p>
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" ... %>
然后使用MVC HTML帮助器替换webforms服务器控件,然后从控制器调用页面,如下所示:
public class PublicController : Controller
{
public ActionResult PublicView()
{
return View("PublicView");
}
}
2)避免直接在代码隐藏的ASPX页面中将System.Web.UI.Page
替换为System.Web.Mvc.ViewPage
命名空间,因为在使用服务器控件时可能会引发一些问题。
答案 1 :(得分:0)
您只需要告诉服务器有关页面的更多信息,包括页面的位置。可以使用<%@ Page >
标签来完成此操作,该标签必须插入页面的开头,如下所示:
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="PublicView.aspx.cs" Inherits="WebApplication1.Public.PublicView" %>
如果您创建的页面是母版页(看起来像是在其中拥有<head>
标记,则在创建新页面时必须使用Master
并选择适当的文件类型)页面:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="PublicView.master.cs" Inherits="PublicView.SiteMaster" %>
答案 2 :(得分:0)
这是我的解决方案。工作正常希望对您有帮助,我的朋友:))
1)配置路由信息:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// This informs MVC Routing Engine to send any requests for .aspx page to the WebForms engine
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspx");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
2)在控制器中调用操作:
public class PublishController : Controller
{
// GET: Publish
public ActionResult Index()
{
return View("WebForm1");
}
}
3)在网络表单后面的代码中:
public partial class WebForm1 : System.Web.Mvc.ViewPage
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
//Your code here
}
}
}