这是一个奇怪的人。我更改了某些内容(不确定是什么),现在我的应用程序的视图在运行时不会编译。

视图本身是强烈键入的:

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

当我访问页面时,它无法编译,说:

CS1061:“对象”不包含“日志”的定义,也不包含扩展方法'log'接受类型“对象”的第一个参数(您是否缺少使用指令或汇编引用?)

相当标准的错误。相应的源代码行是:

<%= 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 视图定义上的属性?

我应该指出,同一控制器上的其他视图正在起作用,并且它们具有与我上面显示的完全相同的页面声明。

编辑 有人知道生成的源代码文件的寿命吗?

编辑 我找到了罪魁祸首(在下面的回答中),但我不知道为什么会发生这种情况。如果有人可以解释,我会很感激!

有帮助吗?

解决方案 4

好的,所以我对此进行了削减:

<%@ 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
system.web.mvc.viewpage
system.web.ui.page

但是,如果我删除 <%@ Import 线,我明白了:

asp.views_operator_create_aspx
system.web.mvc.viewpage`1 [mynamespace.operatormodel
system.web.mvc.viewpage

我不知道为什么导入不再会导致页面不再被强烈键入。有人可以解释吗?关于如何调试或跟踪汇编的任何提示都很好。我现在可以继续编码真是太好了,但这并不是一个非常令人满意的问题。

其他提示

你是在引用 OperatorModel 在您的web.config中正确吗?这将使您明确参考 OperatorModel.

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

或者,您可以更改您的 Inherits 价值为:

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

另外,当将模型对象传递到视图时,请确保检查null或返回空 OperatorModel:

return View(operatorModel 
    ?? new OperatorModel() { Text = "I can has not found!" });

我发现当我有这样的完全奇怪的错误时,有时如果我删除所有文件的影子副本,它将清除它。您会发现它:

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

替换您在上面该行中使用的任何版本的框架。删除与您的项目相对应的所有文件(或仅删除目录中的所有内容)。

您可能必须关闭W3P服务,以确保它放开所有文件,并且可以将其删除。

另外,我相信您会在其中找到所需的生成的源代码。

您没有碰巧删除属于 /views文件夹根部的特殊,魔法的web.config文件,是吗?

这至少每月抓到一次

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top