将模型与部分视图一起使用 - 当前上下文中不存在该名称

时间:2015-03-24 10:20:30

标签: asp.net-mvc asp.net-mvc-4 razor

另一个nerddinner noob在这里。我通过示例nerddinner项目完成了它,并开始创建一个我需要的新类似的东西。

所以,我的index.cshtml看起来像这样:

@model PagedList.IPagedList<ProjectSender.Models.Incident>
...
@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.ActionLink(item.Title, "Details", new { id = item.IncidentId })
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Description)
        </td>
        <td>
            @Html.Partial("_ReserveStatusList", item)
        </td>
    </tr>
}

我的部分视图如下:

@model PagedList.IPagedList<ProjectSender.Models.Incident>
<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
<script type="text/javascript">

    function AnimateProjectMessage() {
        $("#projectmsg").animate({ fontSize: "1.5em" }, 400);
    }

</script>
<div id="projectmsg">


        @Ajax.ActionLink("Reserve this Project",
                             "Reserve", "Projects",
                                      new { id = item.IncidentId },
                             new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "projectmsg", OnSuccess = "AnimateProjectMessage" })

</div>

如果我替换部分视图并只使用Ajax.ActionLink中的index.cshtml,则可以正常使用。但是,如果我在局部视图中使用它,对于item (in item.IncidentId)我得到&#34;当前上下文中不存在名称项。&#34; 但是,没有VS中的红色波浪形我在浏览器中收到此错误。

如果您将此与nerddinner进行比较,我基本上会尝试在晚餐列表中删除每份晚餐的RSVP选项。 RSVP局部视图通常位于“详细信息”页面上。

为了完整,

编辑。这是我要求的控制器代码,以防有人在将来查看此内容:

public ActionResult Index(string searchString, int? page)
        {
            int pageSize = 10;
            int pageNumber = (page ?? 1);

            IQueryable<Incident> incidents = null;

            incidents = incidentRepository.FindRecentIncidents(searchString);

            return View(incidents.ToPagedList(pageNumber, pageSize));
        }

最终,在从MVC3 / EF4升级到MVC4 / EF4并将局部视图恢复为原始的nerddinner代码(如接受的答案中所建议的)之后,一切都还可以。

1 个答案:

答案 0 :(得分:0)

请注意,部分内容未定义item。部分视图将其作为模型接收(将您的部分模型修复为单个Incident btw - 您没有在其中传递列表),因此您需要使用Model来引用转而通过的项目:

@model ProjectSender.Models.Incident
...
@Ajax.ActionLink("Reserve this Project",
                     "Reserve", "Projects",
                              new { id = Model.IncidentId },