我正在为ASP.NET MVC中的项目编辑页面。我想为创建页面和编辑页面使用一个控件,所以我不必重复代码。我在EditorTemplates
内设置了一个/Views/Shared
文件夹来保存我的模板。我在那里放了一个名为ArticlePresentation.ascx
的.ascx文件。
ArticlePresentation.ascx
看起来像这样:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<genesis.Core.Presentation.ArticlePresentation>" %>
Testing the control
我的Edit.aspx
视图如下所示:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/genesis.Master" Inherits="System.Web.Mvc.ViewPage<genesis.Core.Presentation.ArticlePresentation>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Edit
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Edit</h2>
<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>
<%: Html.EditorFor(ArticlePresentation => ArticlePresentation)%>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
我可以构建网站而不会出现任何错误,但是,当我运行网站并浏览到编辑页面时,我收到此错误:
System.Web.HttpParseException未被用户代码
处理等等......等等......Message=The directive 'control' is unknown. Source=System.Web ErrorCode=-2147467259 WebEventCode=0 FileName=C:<path to folder>asp.net mvc\genesis\genesis\Views\Shared\EditorTemplates\ArticlePresentation.aspx Line=2 VirtualPath=/Views/Shared/EditorTemplates/ArticlePresentation.aspx StackTrace: at System.Web.UI.TemplateParser.ParseString(String text, VirtualPath virtualPath, Encoding fileEncoding) at System.Web.UI.TemplateParser.ParseFile(String physicalPath, VirtualPath virtualPath) at System.Web.UI.TemplateParser.ParseInternal() at System.Web.UI.TemplateParser.Parse() at System.Web.Compilation.BaseTemplateBuildProvider.get_CodeCompilerType() at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() at System.Web.Compilation.BuildProvidersCompiler.PerformBuild()
我搜索谷歌寻找解决方案,但到目前为止我发现的一切都与在aspx页面而不是ascx页面中控制相关。
有谁知道可能导致此错误的原因?
答案 0 :(得分:4)
您收到此错误的原因是您的文件的扩展名为.aspx
而非.ascx
。请仔细阅读错误消息:
错误码= -2147467259
WebEventCode = 0
FileName = C:\ Documents and 设置\ bquakkelaar \桌面\ dropstuff \ asp.net MVC \成因\成因\视图\共享\ EditorTemplates \ ArticlePresentation。的 ASPX 强>
现在将文件重命名为ArticlePresentation.ascx
,一切都将按预期工作。
你也可以替换这一行:
<%: Html.EditorFor(ArticlePresentation => ArticlePresentation)%>
用这个:
<%: Html.EditorForModel() %>