Domanda

Come posso fare per passare due set di dati a una vista in ASP.NET MVC?

Ho provato un paio di cose e nessuno dei due ha funzionato, quindi sono giunto alla semplice conclusione: Sto sbagliando.

Ho 2 domande:

callRepository.FindOpenCalls () e callRepository.FindAllMyCalls(user)

e voglio mettere entrambi i set di dati in una vista tramite 2 viste parziali (rispettivamente OpenCalls.ascx e AssignedCalls.ascx).

Mi piacerebbe farlo usando la funzione Index () nel mio CallsController.vb.

Al momento ho:

'
' GET: /Calls/

<Authorize()> _
Function Index() As ActionResult
    ViewData("OpenCallCount") = callRepository.CountOpenCalls.Count()
    ViewData("UrgentCallCount") = callRepository.CountUrgentCalls.Count()
    ViewData("HighCallCount") = callRepository.CountHighCalls.Count()
    ViewData("NormalCallCount") = callRepository.CountNormalCalls.Count()
    ViewData("LowCallCount") = callRepository.CountLowCalls.Count()

    ViewData("MyOpenCallsCount") = callRepository.CountMyOpenCalls(Session("LoggedInUser")).Count()
    ViewData("UserName") = Session("LoggedInUser")

    Dim viewOpenCalls = callRepository.FindAllOpenCalls()
    Dim viewMyOpenCalls = callRepository.FindAllMyCalls(Session("LoggedInUser"))

    Return View(viewOpenCalls)
End Function

Che ovviamente restituisce solo le chiamate aperte, ma vorrei restituire sia viewOpenCalls che viewMyOpenCalls.

Come potrei farlo?

Mostrando il mio aiuto LINQ?

Grazie per l'aiuto in anticipo.

È stato utile?

Soluzione

Il modo migliore per passare i dati a una vista è in realtà avere un ViewData specifico per la tua vista, contenente solo i dati necessari.

Invece di avere stringhe magiche ( ViewData (" MyOpenCallCount ") ) definisci una classe specifica contenente tutti i dati necessari per questa vista (scusami se il mio VB.Net è un po 'arrugginito):

public class CallInfo
    public OpendCallCount as int
    public UrgentCallCount as int   
    'etc.
end class

public class CallViewData
    public AllCalls as CallInfo
    public MyCalls as CallInfo
    public UserName as String
end class

E usa una vista fortemente tipizzata derivante da ViewPage (di CallViewData) , in questo modo hai intellisense e non hai bisogno di lottare con stringhe hardcoded per ottenere le tue informazioni.

Popolare CallViewData con le informazioni di entrambe le chiamate e delle chiamate dell'utente corrente, restituisce questa istanza.

   Dim data as new CallViewData
   data.AllCalls = new CallInfo {OpenCallCount = ...  }
   'etc
   return View(data)

Altri suggerimenti

Non è necessario assegnare elementi di dati a ViewData in modo frammentario come si sta facendo. Se per qualche motivo non è possibile passare gli oggetti CallRepository, è possibile creare e un altro oggetto dati che manterrà aperti e tutti i dati del repository delle chiamate e li passerà.

E questo è un design che in realtà è molto più flessibile a lungo termine.

È possibile memorizzare ViewData in un oggetto modello e passarlo. Questo è spiegato molto bene nel capitolo 9 di ASP ASP ASPCNET MVC .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top