Вновь созданная веб-форма в папке не найдена ошибка

Я делаю проект в 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, расположенный внутри общей папки?

Вам необходимо настроить публичный контроллер для маршрутизации к вашим представлениям.

Nathan Champion 21.01.2019 17:54

Как это должно быть? @НатанЧемпион

Volazh 22.01.2019 01:23

@Volazh, не могли бы вы показать код своей страницы PublicView.aspx?

Siavas 22.01.2019 02:37

@Siavas Я разместил общедоступный код aspx в начале сообщения!

Volazh 22.01.2019 02:49

Мой плохой @Волаж!

Siavas 22.01.2019 02:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
351
3

Ответы 3

Вам нужно только сообщить серверу больше информации о вашей странице, включая ее местоположение. Это можно сделать с помощью тега <%@ 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 непосредственно в коде программной части, поскольку это может вызвать несколько проблем при использовании серверных элементов управления.

Ссылка:Как определить маршруты для приложений Web Forms

Другие вопросы по теме