0

为了提供有关实体的一些背景知识,我有一个 Course 实体和一个 Module 实体,它们具有一对多的关系。这意味着一门课程可以有许多模块。

我希望能够动态添加尽可能多的模块,所以我当然选择了将部分视图添加到编辑页面的方向。

这里涉及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 之间的冲突?

4

2 回答 2

1

这条线可能会导致问题:

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

您应该替换Modelmodel.

解决这种拼写错误并不难。如果您在 ASP.NET 中打开了详细的错误消息,您的浏览器中将显示如下内容:

说明:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并适当修改您的源代码。

编译器错误消息:CS0103:当前上下文中不存在名称“模型”

源错误:

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

源文件:...\MyView.cshtml 行:22

显示详细的编译器输出:

显示完整的编译源:

有问题的行(第 22 行)以红色突出显示,使得错误所在的位置非常明显。

如果你有一个非常糟糕的语法错误,那么标题源错误下方显示的代码可能很难理解。在这种情况下,您可以单击文本Show Complete Compilation Source以查看编译器难以理解的内容,并希望能够将其与您的 Razer 视图引擎源代码相关联。

于 2013-03-09T13:27:29.427 回答
0

我知道这已经过时了,但仍然如此。我很聪明地将我的 mvc 项目命名为WebClient,它与System.Net.WebClient命名空间冲突。

于是razor搜索类,找到了一个,不幸的是在系统dll中。

所以不要像我一样明智地选择项目名称,或者只是在你的类前面加上完整路径。

于 2017-10-04T19:27:06.223 回答