0

私は以下を機能させようとしています

Function AddService(id As Integer) As ViewResult
        Dim serv As RequestedService = New RequestedService
        serv.JobId = id

        Dim ServiceList = New List(Of RequestedService)()

        Dim ServiceQuery = From s In db.Services
                   Select s

        ServiceList.AddRange(ServiceQuery)

        ViewBag.ServiceId = New SelectList(ServiceList, s.IDServices, s.ServiceName)

        Return View(serv)
    End Function

だが

        ViewBag.ServiceId = New SelectList(ServiceList, s.IDServices, s.ServiceName)

次のエラーが表示されます:「s」は宣言されていません。保護レベルが原因でアクセスできない場合があります。

これを修正する方法がわかりません。基本的に、SelectListにIDと文字列の両方を入力して、ビューに渡す必要がありますか?

4

1 に答える 1

0

RequestedServiceモデルにと呼ばれるプロパティがIDServicesありServiceName、次を使用できると仮定します。

ViewBag.ServiceId = New SelectList(ServiceList, "IDServices", "ServiceName")

しかし、あなたは本当にこの中間リストを必要としません:

Function AddService(id As Integer) As ViewResult
    Dim serv As RequestedService = New RequestedService
    serv.JobId = id

    ViewBag.ServiceId = New SelectList(db.Services, "IDServices", "ServiceName")

    Return View(serv)
End Function

そして、あなたは本当に、本当に、本当にViewBagを使用する必要はありませんが、代わりにビューモデルを使用します。

Function AddService(id As Integer) As ViewResult
    Dim model = New RequestedServiceViewModel
    model.JobId = id
    model.Services = New SelectList(db.Services, "IDServices", "ServiceName")
    Return View(model)
End Function

これで、ビューはビューモデルに強く型付けされます。

@ModelType RequestedServiceViewModel
@Html.DropDownListFor(Function(x) x.ServiceId, Model.Services)
于 2012-08-14T21:39:01.370 に答える