这是一个奇怪的。我改变了一些东西(不确定是什么),现在我的应用程序的视图在运行时没有编译。
视图本身是强类型的:
<%@ Page Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<MyNamespace.OperatorModel>" %>
当我访问该页面时,它无法编译,说:
CS1061:'object'不包含'Log'的定义,并且没有扩展方法'Log'可以找到接受'object'类型的第一个参数(你是否缺少using指令或汇编引用?)< / p>
漂亮的标准错误。相应的源代码行是:
<%= 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
属性?
我应该指出同一控制器上的其他视图正在运行,并且它们具有与上面所示完全相同的页面声明。
编辑有人知道生成的源代码文件在哪里存在,假设它存在于某个地方吗?
编辑我找到了罪魁祸首(我在下面的回答中),但我不知道为什么会这样。如果有人能解释我会很感激!
答案 0 :(得分:2)
您是否在Web.Config中正确引用了OperatorModel
?这将允许您明确引用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!" });
答案 1 :(得分:1)
我发现当我有类似这样的奇怪错误时,有时如果我删除所有文件的阴影副本,它将清除它。你会在:
找到它%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
替换您在上面那行中使用的任何版本的框架。删除与项目对应的所有文件(或只删除目录中的所有文件)。
您可能必须关闭w3p服务以确保它可以删除所有文件,然后您可以将其删除。
此外,我相信您会在那里找到您正在寻找的生成的源代码。
答案 2 :(得分:1)
您没有碰巧删除位于/ Views文件夹根目录下的那个特殊的,神奇的web.config文件,是吗?
[这个月至少抓住我一次]
答案 3 :(得分:0)
好的,所以我把我的观点减少到了这个:
<%@ 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
我不知道为什么导入会导致页面不再强类型化。谁能解释一下?有关如何调试或跟踪编译的任何提示都会很好。我现在可以继续编码,这很好,但这不是一个非常令人满意的问题。