J'ai actuellement le code suivant dans le Homecontroller de mon projet MVC: 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: p> 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? p> p>
7 Réponses :
Oui - Créez une nouvelle classe - que vous utiliserez comme modèle - contenant à la fois des tables: 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. P> p>
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 A A Model.table1Data code> et
Model.table2Data CODE>.
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);
}
}
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: p> puis dans votre contrôleur que vous auriez Passez ceci à votre vue: p>
Pourquoi n'ajoutez-vous pas une classe dans vos modèles pour cela? Alors vous passez MyModel à la vue de la tête de la vue. p> sur le contrôleur : P> Indice d'action publique ()
{
MyDataContext DC = nouveau myDataContext (); p>
Vous pouvez les faire à la fois dans un seul point de vue:
Définition du modèle: strong> p> Utilisation (dans le contrôleur): strong> p>
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;
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>