0

エンティティの背景を説明するために、1 対多の関係を持つ Course エンティティと Module エンティティがあります。これは、コースに多くのモジュールを含めることができることを意味します。

できるだけ多くのモジュールを動的に追加できるようにしたかったので、もちろん編集ページに部分ビューを追加する方向に進みました。

ここでは 2 つのビューが関係しています。

  1. モジュール - コースに関連するすべてのモジュールを表示する単なる編集ページである、コース コントローラー内の厳密に型指定されたビュー
  2. _Add - モジュールの作成ページである、モジュール コントローラー内の厳密に型指定された部分ビュー

ビュー Modules で、次の行を追加して、部分的にレンダリングされるかどうかをテストします。

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

ただし、常に次のエラーが表示されます: The name 'model' does not exist in the current context

以下のように、他のソースの読み取りからモデルを渡そうとしました。

  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)

に置き換える必要がModelありmodelます。

この種のスペルミスのトラブルシューティングは難しくありません。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 に答える