2

複数のモデルを View に渡す必要があり、View を厳密に型指定したいと考えています (そのため、私ができることであれば、各モデルを ViewBag に渡すことなくこれを行いたいと考えています)。

Public Class TestModels
    Public Class TestDetail

        Public firstModel As firstModelHere ' An entity
        Public secondModel As secondModelHere ' An entity

        Sub New()
            firstModel = Nothing
            secondModel = Nothing
        End Sub

    End Class
End Class

モデル用のディレクトリにある独自の独立したファイルにあります。カプセル化されたモデルを次のようにビューに渡します。

@ModelType Website.TestModels.TestDetail
@Html.LabelFor(Function(model) model.firstModel.userName)
@Html.LabelFor(Function(model) model.secondModel.lastName)

そして、コントローラに firstModel と secondModel を設定し、モデルをビューに渡します。プロジェクトをコンパイルすると、多数のエラーが発生します (以下を参照)。これを修正するにはどうすればよいですか? ビューから別のクラスにカプセル化された複数のモデルにアクセスできるようにしたいだけです。前もって感謝します。

Error   134 'ViewBag' is not declared. It may be inaccessible due to its protection level.
Error   129 'Context' is not declared. It may be inaccessible due to its protection level.
Error   138 'Layout' is not declared. It may be inaccessible due to its protection level.
Error   131 sub 'Execute' cannot be declared 'Overrides' because it does not override a sub in a base class.
...
4

1 に答える 1

0

コーディングのトリックやパターンが抜けていたらすみませんが、クラス「TestModels」内にクラス「TestDetail」があるのはなぜですか?

複数のモデルをビューに渡すだけの場合は、ビューに渡すエンティティごとにプロパティを持つ単一のビュー モデルを作成します。

モデルの表示- ビューでアクセスするモデルをカプセル化するために使用されます

Public Class TestModel   
    Public Property FirstModel As FirstEntity ' An entity
    Public Property SecondModel As SecondEntity ' An entity
End Class

コントローラーのアクション

Function Index() As ActionResult
    ' Create models to pass to the view.
    Dim a As New FirstModel
    Dim b As New SecondModel

    ' Create model to pass the models in.
    Dim model As New TestModel
    With model
        .firstModel = a
        .secondModel = b
    End With

    Return View(model)
End Function
于 2013-02-06T19:47:17.880 に答える