Рендеринг частичного вида: имя «модель» не существует в текущем контексте.

Чтобы дать некоторую информацию о сущностях, у меня есть сущность Курса и сущность Модуля с отношением один ко многим. Это означает, что курс может иметь много модулей.

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

Здесь рассматриваются 2 точки зрения:

  1. Модули — строго типизированное представление в контроллере курса, которое представляет собой просто страницу редактирования, отображающую все модули, связанные с курсом.
  2. _Add — строго типизированное частичное представление в контроллере модуля, которое является страницей создания модулей.

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

@Html.Partial("~/Views/Module/_Add")

Однако я всегда получаю эту ошибку: Имя «модель» не существует в текущем контексте

Я попытался передать модель из чтения других источников со следующим ниже:

  1. @Html.Partial("~/Views/Module/_Add", Model)
  2. @Html.Partial("~/Views/Module/_Add", model)
  3. @Html.Partial("~/Views/Module/_Add", new RocketLabs.Models.Module())

Но ни один из них не работает. Есть идеи? Любой совет или комментарий будут высоко оценены. Спасибо!

ОБНОВЛЕНИЕ 2 – ПОЛНЫЕ КОДЫ

Модули Просмотр (Родительский) код:

@model RocketLabs.Models.Course

@{
    ViewBag.Title = "Modules";
}

<h2>@Html.DisplayFor(model => model.Name)</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

<div class="row-fluid">
    @using (Html.BeginForm()) {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>Course Modules</legend>
            <div class="row-fluid">
                <div class="span4">
                    @Html.DisplayFor(model => model.Description)
                </div>
                <div class="span4">
                    @Html.HiddenFor(Model => model.Id)
                    @Html.HiddenFor(model => model.Name)
                    @Html.HiddenFor(model => model.Description)
                    @Html.HiddenFor(model => model.Author)
                    @Html.HiddenFor(model => model.CreateDate)
                    @Html.HiddenFor(model => model.IsDeleted)
                    @Html.HiddenFor(model => model.IndustryId)                    
                </div>
                <div class="span4 pull-right">
                    <div class="control-group">
                        <div class="controls">
                            <input type="submit" role="button" class="btn btn-primary btn-medium" value="Save Course" />
                            <a href="@Url.Action("Index", "Course")" role="button" class="btn btn-primary btn-medium">Back to Courses</a>
                        </div>
                    </div>
                </div>
            </div>
            <div class="row-fluid">
                <div class="span2">
                    <a href="#" role="button" class="btn btn-success btn-medium"><i class="icon-plus icon-white"></i> Add Module</a>
                </div>
                <div class="row-fluid">
                    <div class="span12">                        
                        @*@{ Html.RenderPartial("~/Views/Module/_Add", Model); }*@
                        @*@Html.Partial("~/Views/Module/_Add", Model)*@
                        @*@Html.Partial("~/Views/Module/_Add", model)*@
                        @*@Html.Partial("~/Views/Module/_Add", new RocketLabs.Models.Module())*@
                    </div>
                </div>
            </div>
        </fieldset>
    }
</div>

_Добавить код частичной страницы:

@model RocketLabs.Models.Module

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Module</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Title)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Title)
            @Html.ValidationMessageFor(model => model.Title)
        </div>
        ...

Может ли быть конфликт между @model в дочернем частичном и @model в родительском представлении?


comment
Пожалуйста, опубликуйте код вашего _Add частичного!   -  person nemesv    schedule 09.03.2013
comment
Ценю ваш ответ! Обновил :)   -  person AnimaSola    schedule 09.03.2013
comment
Вы получаете эту ошибку, когда код, сгенерированный ASP.NET подсистемой представления Razor, содержит идентификатор model, который не определен в коде. В фрагментах, которые вы разместили здесь, нет ничего, что делало бы очевидным, где ошибка. Однако имя свойства модели в представлении — Model с заглавной M, поэтому, возможно, вам нужно найти, где вы ссылаетесь на это свойство, используя неправильную заглавную букву. Сообщение об ошибке, которое вы получаете от ASP.NET, должно помочь вам точно определить, где ошибка.   -  person Martin Liversage    schedule 09.03.2013
comment
Ошибка будет иметь некоторую дополнительную информацию, т.е. Номер строки и файл, где он прерывается. Не могли бы вы проверить и увидеть, где именно он ломается?   -  person Srikanth Venugopalan    schedule 09.03.2013
comment
Хорошо, позвольте мне привести весь код обоих представлений. Спасибо за ответы!   -  person AnimaSola    schedule 09.03.2013
comment
Вы все еще не опубликовали полную _Add частичную...   -  person nemesv    schedule 09.03.2013


Ответы (2)


Эта строка, вероятно, вызывает проблемы:

@Html.HiddenFor(Model => model.Id)

Вы должны заменить Model на model.

Исправить такую ​​орфографическую ошибку несложно. Если вы включили подробные сообщения об ошибках в ASP.NET, в вашем браузере будет отображаться что-то вроде этого:

Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. 

Compiler Error Message: CS0103: The name 'model' does not exist in the current context

Source Error:

Line 20:                 </div>
Line 21:                 <div class="span4">
Line 22:                     @Html.HiddenFor(Model => model.Id)
Line 23:                     @Html.HiddenFor(model => model.Name)

Source File: ...\MyView.cshtml    Line: 22 

Show Detailed Compiler Output:

Show Complete Compilation Source:

Нарушающая строка (строка 22) выделена красным, что делает очевидным, где ошибка.

Если у вас действительно серьезная синтаксическая ошибка, код, отображаемый под заголовком Ошибка источника, может быть трудным для понимания. В этом случае вы можете щелкнуть текст Показать полный исходный код компиляции, чтобы увидеть, что компилятору трудно понять, и, надеюсь, он сможет сопоставить это с исходным кодом вашего Razer View Engine.

person Martin Liversage    schedule 09.03.2013
comment
Если вы видите в коде Modules View (Parent), я пробовал разные способы, включая Model с большой буквы M. Тем не менее, у меня это не сработало. - person AnimaSola; 09.03.2013

Я знаю, что это довольно устарело, но все же. Я был достаточно умен, чтобы назвать свой проект mvc WebClient, который конфликтует с пространством имен System.Net.WebClient.

Итак, бритва искала класс и нашла его, к сожалению, в системной dll.

Так что не уподобляйтесь мне и выбирайте имя проекта с умом или просто добавляйте к своему классу префикс полного пути.

person Ľuboš Čurgó    schedule 04.10.2017