Как получить доступ к локальным данным json-файла в MVC html View без использования моделей и контроллеров? [Дубликат]

Члены класса:

Для деструктора pure virtual требуется реализация.

Объявление деструктора по-прежнему требует от вас определения (в отличие от обычной функции):

struct X
{
    virtual ~X() = 0;
};
struct Y : X
{
    ~Y() {}
};
int main()
{
    Y y;
}
//X::~X(){} //uncomment this line for successful definition

Это происходит потому, что деструкторы базового класса вызывается, когда объект уничтожается неявно, поэтому требуется определение.

virtual методы должны быть реализованы или определены как чистые.

Это похоже на методы не virtual без определения, с добавлением аргументов, которые генерирует чистая декларация dummy vtable, и вы можете получить ошибку компоновщика без использования функции:

struct X
{
    virtual void foo();
};
struct Y : X
{
   void foo() {}
};
int main()
{
   Y y; //linker error although there was no call to X::foo
}

Чтобы это сработало, объявите X::foo() чистым:

struct X
{
    virtual void foo() = 0;
};

Non- virtual

Некоторые члены должны быть определены, даже если они явно не используются:

struct A
{ 
    ~A();
};

Следующие ошибки приведут к ошибке:

A a;      //destructor undefined

Реализация может быть встроенной в самом определении класса:

struct A
{ 
    ~A() {}
};

или снаружи:

A::~A() {}

Если реализация вне определения класса, но в заголовке, методы должны быть отмечены как inline, чтобы предотвратить множественное определение.

Все используемые методы-члены должны быть определены, если они используются.

Общей ошибкой является отказ от квалификации имени:

struct A
{
   void foo();
};

void foo() {}

int main()
{
   A a;
   a.foo();
}

Определение должно быть

void A::foo() {}

static. Члены данных должны быть определены вне класса в единственная единица перевода:

struct X
{
    static int x;
};
int main()
{
    int x = X::x;
}
//int X::x; //uncomment this line to define X::x

Инициализатор может быть предоставлен для элемента данных static const типа интеграла или перечисления в определении класса; однако odr-использование этого элемента по-прежнему потребует определения области пространства имен, как описано выше. C ++ 11 позволяет инициализировать внутри класса для всех членов static const данных.

79
задан zmo 24 January 2014 в 20:57
поделиться

4 ответа

Я хочу иметь возможность запрашивать статические .html-файлы, которые находятся в папке ~ ~ / Views.

Вы не можете. В этой папке есть файл web.config, который явно запрещает доступ к нему из любого файла. Если вы хотите иметь доступ к файлам с клиента, эти файлы не должны помещаться в папку Views, которая имеет особое значение в ASP.NET MVC.

У вас может быть папка ~/Static где вы можете разместить ваши HTML-файлы. И затем войдите в него так:

http://example.com/yourapplicationname/static/foo.html
91
ответ дан Moe Howard 25 August 2018 в 21:54
поделиться

Чтобы разрешить такие файлы, как js и html в папке «Виды», отредактируйте файл web.config в видах-папке:

<system.webServer>
<handlers>
  <add name="JavaScriptHandler" path="*.js" verb="*"
     preCondition="integratedMode" type="System.Web.StaticFileHandler" />      
  <add name="HtmlScriptHandler" path="*.html" verb="*"
     preCondition="integratedMode" type="System.Web.StaticFileHandler" />
  <remove name="BlockViewHandler"/>
  <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>

64
ответ дан cs3x 25 August 2018 в 21:54
поделиться

Другой альтернативный вариант заключается в том, чтобы вставить метод действия в любой из желаемых контроллеров для обслуживания html-файла

public ActionResult MyHtml()
{
    var result = new FilePathResult("~/Views/HtmlPage1.html", "text/html");
    return result;
}

Доступ к html как http: // yoursite / controller / MyHtml . Вы можете расширить этот метод действий, чтобы принять имя файла html в качестве параметра method / querystrign и отобразить файл во время выполнения, например, что-то вроде этого.

 public ActionResult MyHtml(string htmlPageName)
 {
      var result = new FilePathResult($"~/Views/{htmlPageName}.html", "text/html");
      return result;
 }
11
ответ дан Venkatesh Muniyandi 25 August 2018 в 21:54
поделиться

Я хочу иметь возможность запрашивать статические .html-файлы, которые находятся в папке ~ / Views.

Ну, вы можете. Отмеченный ответ не совсем корректен, хотя он дает решение.

Правильная аргументация в отмеченном ответе правильная: в папке «Представления», которая препятствует файлам, задан параметр web.config (параметр BlockViewHandler) для доступа непосредственно. Он предназначен для защиты представлений в Asp.Net MVC. Но если вы задали вопрос об обслуживании этих файлов напрямую, то у вас, вероятно, есть веские основания для этого, например, с использованием частичных представлений AngularJS (как в нашем случае), где мы не хотим дублировать папку представлений со странными именами.

Итак, вот очень простая настройка, которую вы можете сделать в файле web.config, найденном в папке «Представления», без ущерба для безопасности ваших просмотров asp.net mvc. Это сохранит файлы .cshtml как обычно, но оставит только ваши .html-файлы.

Измените это

<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode"    type="System.Web.HttpNotFoundHandler" />

- to -

<add name="BlockViewHandler" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
29
ответ дан Vikas 25 August 2018 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: