Почему в ASP.NET MVC появляется ошибка «Директива 'control' is unknown"? - PullRequest
4 голосов
/ 25 июня 2010

Я работаю над страницей редактора для проекта в ASP.NET MVC.Я хотел бы использовать элемент управления как для страницы создания, так и для страницы редактирования, чтобы мне не пришлось дублировать код.Я установил папку EditorTemplates внутри /Views/Shared для хранения моих шаблонов.И я поместил туда файл .ascx с именем ArticlePresentation.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()

и т. д. ... и т. д. и т. п. *

Я искал решения в Google, но все, что я нашел до сих поротносится к наличию элемента управления на странице aspx, а не на странице ascx.

Кто-нибудь знает, что может быть причиной этой ошибки?

1 Ответ

4 голосов
/ 25 июня 2010

Причина, по которой вы получаете эту ошибку, в том, что ваш файл имеет расширение .aspx, а не .ascx. Внимательно прочитайте сообщение об ошибке:

ErrorCode = -2147467259

WebEventCode = 0

FileName = C: \ Documents and Настройки \ bquakkelaar \ Desktop \ DropStuff \ asp.net MVC \ генезис \ генезис \ Views \ Shared \ EditorTemplates \ ArticlePresentation. ASPX

Теперь переименуйте файл в ArticlePresentation.ascx, и все будет работать как положено.

Также вы можете заменить эту строку:

<%: Html.EditorFor(ArticlePresentation => ArticlePresentation)%>

с этим:

<%: Html.EditorForModel() %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...