Mvc 3 Razor View Engine жалуется на отсутствие модели в автоматически сгенерированном коде - PullRequest
3 голосов
/ 27 июля 2011

Я постараюсь, чтобы этот вопрос был коротким .. (попробуйте)

Я расширил RazorViewEngine следующим образом

public class MyViewEngine:RazorViewEngine
{
    public MyViewEngine(array viewPathCollection)
    {
        //My views are all embedded resources and here I   
        //set ViewLocationFormats and PartialViewLocationFormats 
        //so that MyVirtualPathProvider can find them inside the assembly
    }
    protected override bool FileExists(ControllerContext controllerContext, string virtualPath)
    {
        //Some Logic to check for file
    }
}

Затем в Global.asax Application_Start сделал это

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new AssemblyResourceViewEngine(ViewPathCollection.ToArray()));

Теперь, когда я запускаю (все хуки на месте), я получаю эту ошибку компиляции в браузере

Ошибка компиляции Описание: во время компиляции ресурса, необходимого для обслуживания этого запроса, произошла ошибка. Пожалуйста, просмотрите следующие конкретные подробности ошибки и измените свой исходный код соответствующим образом.

Сообщение об ошибке компилятора: CS0103: имя 'модель' не существует в текущем контексте

Ошибка источника:

public override void Execute() {
  Write(model);
  WriteLiteral(" MyModelClass \r\n\r\n");

И при нажатии Показать полный источник компиляции я вижу это

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.225
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace ASP {
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Web;
    using System.Web.Helpers;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.WebPages;
    using System.Web.WebPages.Html;
    using Automotive.Web.Core.Utilities;


    public class _Page_bin_MyProject_DLL_Views_Home_Index_cshtml : System.Web.WebPages.WebPage {

#line hidden
        public _Page_bin_MyProject_DLL_Views_Home_Index_cshtml() {       
        }

        protected ASP.global_asax ApplicationInstance {
            get {
                return ((ASP.global_asax)(Context.ApplicationInstance));
            }
        }

        public override void Execute() {

Write(model);

WriteLiteral(" MyModelClass \r\n\r\n");

WriteLiteral("Hello, this is the only thing in the view");
        }
    }
}

Дополнительная информация:

Я расширил VirtualPathProvider для поиска своих представлений в разных сборках. Я делаю это в Application_start для регистрации MyVirtualPathProvider

HostingEnvironment.RegisterVirtualPathProvider(new MyVirtualPathProvider());

Если вам нужны разъяснения по этому вопросу, пожалуйста, дайте мне знать. Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Решено ..... копирование файла webconfig из папки views в папку bin делает это .. Не очень нравится решение, хотя ... возможно, придется переосмыслить структуру

1 голос
/ 03 февраля 2014

На самом деле мне не нравится идея скопировать файл web.config из папки View в корзину, вот мое решение.

Добавьте следующие коды в configSections в корне web.config

<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>

Добавить новый раздел

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
  </namespaces>
</pages>
</system.web.webPages.razor>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...