8
votes

MVC - Passer plusieurs tables de données à une vue

J'ai actuellement le code suivant dans le Homecontroller de mon projet MVC: xxx

de sorte que cela fonctionne correctement, mais maintenant je veux passer une deuxième table à travers la même vue. Donc, je pensais que je devrais pouvoir faire quelque chose comme ceci: xxx

est un moyen d'avoir la vue d'accepter deux modèles comme celui-ci ou, alternativement, un moyen de fusionner Les deux ensembles de résultats (les deux tables ne sont en aucun cas liées?


0 commentaires

7 Réponses :


3
votes

Oui - Créez une nouvelle classe - que vous utiliserez comme modèle - contenant à la fois des tables: xxx

puis, dans votre contrôleur, initialisez cette classe et peupler les propriétés et envoyez-la à votre vue. Ensuite, modifiez la vue pour reconnaître ce nouveau type comme modèle de vue.


0 commentaires

17
votes

oui il y a, mais pas tout à fait comme ça. La façon de faire ce que vous souhaitez faire est de créer une classe de visionnels personnalisée. Cette classe ( myPageviewModel em>) aurait deux (ou plusieurs) propriétés, une pour chacun de vos objets. À votre avis, vous les accéderiez à l'aide de Model.table1Data ​​code> et Model.table2Data ​​CODE>.

A

A CLASSE VIEWMODEL PERSONNALES STRUT> est TRÈS strong> Simple: P>

public class HomeController : Controller
{
  public ActionResult Index()
  {
    MyDataContext dc = new MyDataContext();

    MyPageViewModel vm = new MyPageViewModel();

    vm.Table1Data =  from n in dc.Table1                     
                     select n;

    vm.Table1Data = from k in dc.Table2        
                    select k;

    return View(vm);
  }
}


0 commentaires

0
votes

Dans Pre-MVC3, j'aurais utilisé un point de vue et ajouter des propriétés pour chaque objet que vous souhaitez utiliser. Si vous utilisez mvc3, je jetterais un coup d'oeil à ViewBag .

Un modèle de vue simple: xxx

puis dans votre contrôleur que vous auriez Passez ceci à votre vue: xxx


0 commentaires

2
votes

Pourquoi n'ajoutez-vous pas une classe dans vos modèles pour cela? XXX

Alors vous passez MyModel à la vue de la tête de la vue.

sur le contrôleur :

Indice d'action publique () { MyDataContext DC = nouveau myDataContext (); xxx


0 commentaires

1
votes

Vous pouvez les faire à la fois dans un seul point de vue:

Définition du modèle: xxx

Utilisation (dans le contrôleur): xxx


0 commentaires

0
votes

Vous devrez probablement utiliser ViewModel strong>. Vous définissez la classe, qui contiendra des instances des deux classes que vous souhaitez (+ toute autre propriété supplémentaire), puis vous l'utilisez comme modèle.

NewViewModel m = new NewViewModel();
var a = m.T1.PropertyA;
var b = m.T2.PropertyB;


0 commentaires

2
votes

J'ai résolu le problème en créant une liste de «tables» et en passant cela à mon modèle de vue. Ceci est essentiellement une liste d'une liste de transactions. FYI, ma solution a été nommée DAL, et dans les modèles, j'ai créé une transaction pour représenter une transaction.

<td>
   <% int counter = 0; %>
   <% IEnumerable<IEnumerable<DAL.Models.TransactionEntity>> tranlist = 
          (IEnumerable<IEnumerable<DAL.Models.TransactionEntity>>)ViewData.Model; %>

   <% foreach (DAL.Models.TransactionEntity te in tranlist.ElementAt(0))
      {.... create rows/columns as needed for the data in a HTML sub-table ......} %>
 </td>
 <td>
    <% counter = 0; %>
    <% foreach (DAL.Models.TransactionEntity te in tranlist.ElementAt(1))
      {..........} %>
 </td>
 <td>
    <% counter = 0; %>
    <% foreach (DAL.Models.TransactionEntity te in tranlist.ElementAt(2))
      {..........} %>
 </td>


0 commentaires