ASP.NET MVC - расположение представлений Проблема: представление «Индекс» или его мастер не найдены - PullRequest
3 голосов
/ 27 апреля 2010

Я создал проект asp.net MVC 2, он отлично работает !!

Меня попросили интегрировать проект в существующий веб-проект в классическом asp.net

(я добавил папку, содержащую исходный код, а не создавал новый проект, потому что они должны быть в одном проекте)

Я настроил web.config файл

<pages pageBaseType="System.Web.UI.Page" >
      <controls>
        <add tagPrefix="asp"
             namespace="System.Web.UI"
             assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add tagPrefix="asp"
             namespace="System.Web.UI.WebControls"
             assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </controls>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Linq" />
        <add namespace="System.Collections.Generic" />
        <add namespace="SearchApp.Helpers.CheckBoxList"/>
        <add namespace="SearchApp.Helpers.Pager"/>
      </namespaces>
    </pages>
    <httpModules>
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"  />
    </httpModules>
    <!--- END MVC config section-->

и мой global.asax файл (я работаю под IIS 5.1):

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");           

            routes.MapRoute(
                "SearchApp", // Route name
                "SearchApp/{controller}.aspx/{action}/{id}", // URL with parameters
                new { controller = "Search", action = "Index", id = "" } // Parameter defaults
            );
        }

protected void Application_Start(Object sender, EventArgs e)
{
            AreaRegistration.RegisterAllAreas();

            RegisterRoutes(RouteTable.Routes);
}

Иерархия проекта (я не могу найти, как вставить изображение в сообщение):

 +Project
 ++MVC2AppFolder
 +++Controller
 ++++SearchController.cs
 +++Views
 ++++Search
 +++++Index.aspx
 ++global.asax
 ++web.config

Как видите, global.asax отсутствует в папке приложения MVC

при попытке доступа к странице Search / index.aspx с использованием этого URL http://localhost/cstfwsrv/SearchApp/Search.aspx/Index[^] выдается следующая ошибка:

I

The view `Index` or its master was not found. The following locations were searched:
~/Views/Search/Index.aspx
~/Views/Search/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.InvalidOperationException: The view 'Index' or its master was not found. The following locations were searched:
~/Views/Search/Index.aspx
~/Views/Search/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace:


[InvalidOperationException: The view 'Index' or its master was not found. The following locations were searched:
~/Views/Search/Index.aspx
~/Views/Search/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx]
   System.Web.Mvc.ViewResult.FindView(ControllerContext context) +253553
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +139
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +10
   System.Web.Mvc.<>c__DisplayClass14.<InvokeActionResultWithFilters>b__11() +20
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +251
   System.Web.Mvc.<>c__DisplayClass16.<InvokeActionResultWithFilters>b__13() +19
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +178
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +314
   System.Web.Mvc.Controller.ExecuteCore() +105
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +39
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__4() +34
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +59
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +44
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +7
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8677678
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

Как вы можете видеть, он ищет страницу Index.aspx в ~/Views/Search/Index.aspx, которая находится под ~/MVC2AppFolder/Views/Search/Index.aspx

Есть ли способ указать в методе маршрута или где-либо еще путь просмотра?

Заранее спасибо

1 Ответ

2 голосов
/ 27 апреля 2010

Вы можете создать свой собственный ViewEngine, который будет искать в нужном месте, чтобы найти ваш вид. В основном просто добавьте ~ / MVC2AppFolder / {0} перед вашим путем просмотра.

Поскольку вы используете MVC2, возможно, вы захотите увидеть этот пост Фила Хаака об областях MVC2: http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...