ASP.NET MVC ошибка типизированного представления - PullRequest
4 голосов
/ 23 августа 2010

Это странно.Я что-то изменил (не знаю, что именно), и теперь представление моего приложения не компилируется во время выполнения.

Само представление строго типизировано:

<%@ Page Language="C#"
         MasterPageFile="~/Views/Shared/Site.Master"
         Inherits="System.Web.Mvc.ViewPage<MyNamespace.OperatorModel>" %>

Когда я захожу на страницу, это не удаетсяскомпилировать, сказав:

CS1061: «объект» не содержит определения для «Журнала», и метод расширения «Журнал», принимающий первый аргумент типа «объект», не найден (выотсутствует директива using или ссылка на сборку?)

Довольно стандартная ошибка.Соответствующая строка исходного кода:

<%= Html.HiddenFor(model => model.Log) %>

Когда я смотрю на код, сгенерированный компилятором, я вижу, что базовый класс представления не является строго типизированным:

[System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
public class views_operator_create_aspx
    : global::System.Web.Mvc.ViewPage, // NOT STRONGLY TYPED
      System.Web.SessionState.IRequiresSessionState,
      System.Web.IHttpHandler {

Таку меня вопрос: что заставляет компилятор представления игнорировать мой атрибут Inherits в определении представления?

Я должен указать, что другие представления на том же контроллере работают, и у них точно такое же объявление страницыкак я показал выше.

EDIT Кто-нибудь знает, где находится сгенерированный файл исходного кода, предполагая, что он где-то сохраняется?

EDIT Я нашел виновника (в моем ответе ниже), но я понятия не имею, почему это происходит.Если кто-то может объяснить, я буду признателен за это!

Ответы [ 4 ]

2 голосов
/ 23 августа 2010

Правильно ли вы ссылаетесь на OperatorModel в вашем Web.Config? Это позволит вам явно ссылаться на OperatorModel.

<namespaces>
    <add namespace="My.Namespace"/>

в качестве альтернативы вы можете изменить значение Inherits на:

Inherits="System.Web.Mvc.ViewPage<My.Namespace.OperatorModel>"

Кроме того, при передаче объекта модели в представление убедитесь, что вы проверили наличие нуля или вернули пустое OperatorModel:

return View(operatorModel 
    ?? new OperatorModel() { Text = "I can has not found!" });
1 голос
/ 23 августа 2010

Вы случайно не удалили этот специальный волшебный файл web.config, который находится в корне вашей папки / Views, не так ли?

[Это ловит меня хотя бы раз в месяц]

1 голос
/ 23 августа 2010

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

%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files

Замените любую версию Framework, которую вы используете в этой строке выше.Удалите все файлы, которые соответствуют вашему проекту (или просто удалите все в каталоге).

Возможно, вам придется закрыть службу w3p, чтобы убедиться, что она отпускает все файлы, и вы можете удалить ее.

Кроме того, я полагаю, вы найдете там сгенерированный исходный код, который вы ищете.

0 голосов
/ 23 августа 2010

Хорошо, поэтому я сократил свой взгляд до этого:

<%@ Page Language="C#"
         MasterPageFile="~/Views/Shared/Site.Master"
         Inherits="System.Web.Mvc.ViewPage<MyNamespace.OperatorModel>" %>
<%@ Import Namespace="MyNamespace.Data" %>

<asp:Content ContentPlaceHolderID="MainContent" runat="server">
    <%= GetType() %><br />
    <%= GetType().BaseType %><br />
    <%= GetType().BaseType.BaseType %>
</asp:Content>

Вывод был, даже со всеми пустыми областями содержимого:

ASP.views_operator_create_aspx
Система.Web.Mvc.ViewPage
System.Web.UI.Page

Но если я удалю строку <%@ Import, я получу следующее:

ASP.views_operator_create_aspx
System.Web.Mvc.ViewPage`1 [MyNamespace.OperatorModel]
System.Web.Mvc.ViewPage

Я понятия не имею, почему импорт больше не должен вызывать страницубыть строго набранным.Может кто-нибудь объяснить?Любые советы о том, как отладить или проследить компиляцию, были бы хорошими.Здорово, что я могу продолжать писать код, но это не очень удачный конец проблемы.

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