2010-08-18 5 views
0

J'essaie d'imiter la fonctionnalité de multiview webforms et la seule façon dont je peux penser est de mettre une vue partielle dans un objet ViewData? Quelque chose comme ce qui suit:Pouvez-vous mettre une vue partielle dans un objet ViewData?

Voir le code:

<%= ViewData["PartialViewPlaceholder"] %> 

Code Controller:

if(//condition){  
    ViewData["PartialViewPlaceholder"] = partialView1; 
} else { 
    ViewData["PartialViewPlaceholder"] = partialView2; 
} 

Comment iriez-vous à ce sujet?

Répondre

1

ViewData est censé contenir les données réelles , pas les vues elles-mêmes, qui contiennent du code de balisage et de rendu. Ne serait-il pas possible pour vous de le faire:

public ActionResult MyActionMethod() 
{ 
    var model = new MyModel(); 
    model.UsePartialView1 = false; // Tell the view not to use Partial View 1 
    return View("MyView", model); 
}  

Et dans la vue MyView:

<% if (Model.UsePartialView1) 
     Html.RenderPartial("PartialView1", Model); 
    else 
     Html.RenderPartial("PartialView2", Model); %> 

Cela rendra soit PartialView1 ou PartialView2 en utilisant le même modèle en fonction de la condition fixée par le contrôleur .

Ou, pour retourner une vue partielle avec un modèle directement de votre contrôleur, au lieu d'un affichage normal, vous pouvez le faire:

public ActionResult MyActionMethod() 
{ 
    var model = ... 
    ViewData["MyViewData"] = ... 
    return PartialView("PartialView1", model); 
} 

Cela renverra directement le Vue partielle PartialView1 au client . Ceci est surtout utile dans les scénarios AJAX, car le résultat ne sera probablement pas une page HTML entière. Les vues partielles sont des fichiers .ascx.

+0

Idéalement, j'ai besoin de contrôler le PartielView rendu à travers le contrôleur. Comment cela peut-il être fait? – shahidaltaf

+0

@ shahid81 Pourquoi avez-vous besoin de faire cela? Quel est ton scénario? Vous pouvez toujours contrôler quelle vue partielle est rendue * via le contrôleur * en utilisant la méthode que j'ai décrite, tant que le contrôleur est celui qui détermine si 'condition' est rempli. – bzlm

+0

J'ai une petite forme avec un certain nombre de résultats, différents écrans de confirmation, mais je ne veux pas avoir des URL différentes. Comme les formulaires Web, ils sont utilisés avec Multiviews. – shahidaltaf

Questions connexes