Я делаю проект в ASP.NET MVC, идея состоит в том, чтобы создавать независимые представления, для этой цели я создал общую папку, а внутри нее я создал WebForm.aspx с собственным кодом .aspx.cs. Я установил Bootstrap из упаковщика NuGet, сослался на сценарии в WebForm следующим образом:
<html xmlns = "http://www.w3.org/1999/xhtml">
<head runat = "server">
<title></title>
<link href = "../../Content/bootstrap.min.css" rel = "stylesheet" />
<script src = "../../Scripts/bootstrap.min.js"></script>
<script src = "../../Scripts/jquery-3.3.1.min.js"></script>
<script src = "../../Scripts/popper.min.js"></script>
</head>
<body>
<form id = "form1" runat = "server">
<div class = "container-fluid">
<h1>My First Bootstrap Page</h1>
<p>This is some text.</p>
</div>
</form>
</body>
</html>
но когда я запускаю его, он показывает мне ошибку:
это структура:
но когда я запускаю его из веб-формы, созданной из папки, он работает правильно.
Как заставить работать aspx, расположенный внутри общей папки?
Как это должно быть? @НатанЧемпион
@Volazh, не могли бы вы показать код своей страницы PublicView.aspx?
@Siavas Я разместил общедоступный код aspx в начале сообщения!
Мой плохой @Волаж!





Вам нужно только сообщить серверу больше информации о вашей странице, включая ее местоположение. Это можно сделать с помощью тега <%@ 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" %>
Вот мое решение. Это работает. Надеюсь помочь, дружище :))
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
}
}
}
Страница HTTP 404 указывает, что имя метода действия контроллера PublicView не существует в определении контроллера. Если вы хотите связать страницу веб-форм со стилем пути маршрутизации 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 }
);
}
Если вы хотите сопоставить все страницы ASPX внутри папки с одним MapPageRoute, настройте его так, чтобы он содержал заполнитель имени страницы:
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 следующим образом:
<%@ Page Language = "C#" Inherits = "System.Web.Mvc.ViewPage" ... %>
Затем замените серверные элементы управления веб-форм вспомогательными средствами MVC HTML перед вызовом страницы из контроллера, как показано ниже:
public class PublicController : Controller
{
public ActionResult PublicView()
{
return View("PublicView");
}
}
2) Избегайте замены пространства имен System.Web.UI.Page на System.Web.Mvc.ViewPage для страниц ASPX непосредственно в коде программной части, поскольку это может вызвать несколько проблем при использовании серверных элементов управления.
Вам необходимо настроить публичный контроллер для маршрутизации к вашим представлениям.