2010-06-08 6 views
0

Est-il possible que deux vues différentes utilisent le même contrôleur? J'ai un contrôleur très complexe qui affiche certaines données. Maintenant, j'ai besoin d'afficher ces données (qui sont récupérées en utilisant ajax) dans deux vues partielles parce que je veux les placer sur différentes positions dans la mise en page.asp.net mvc2 - deux vues (ou plus) utilisant le même contrôleur?

Répondre

2

la fonction View() peut être passé des arguments, par exemple:

return View(); // The view with the same name as the action. 
return View("MyView") // The view named "MyView" 

Il y a quelques surcharges aussi. Est-ce que cela correspond à la facture?

Sinon, pourquoi ne pas une vue partielle, par exemple, étant donné ce modèle:

public class BlogItem 
{ 
    public string Title { get; set; } 
    public int Id { get; set; } 
} 

Et cette action:

public ActionResult Index() 
{ 
    var items = new List<BlogItem> 
       { 
        new BlogItem { Title = "Test Blog Item", Id = 1 } 
       }; 
    return View(items); 
} 

Et ce point de vue:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<BlogItem>>" %> 
<asp:Content ContentPlaceHolderID="MainContent" runat="server"> 
    <% Html.RenderPartial("List", Model); %> 

    <% Html.RenderPartial("Icon", Model); %> 
</asp:Content> 

je peux avoir deux vues partielles utilisant le même modèle:

Liste:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<BlogItem>" %> 
<ul> 
    <% foreach (var item in Model) { %> 
     <li><%= item.Title %></li> 
    <% } %> 
</ul> 

Icône:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<BlogItem>" %> 
<div> 
    <% foreach (var item in Model) { %> 
     <div class="icon"><img src="..." /></div> 
     <div class="text"><%= item.Title %></div> 
    <% } %> 
</div> 

Est-ce que ça marche?

+0

Je ne peux pas retourner deux fois à la fois dans le contrôleur? –

+0

@ile: Non, mais vous pouvez utiliser la logique conditionnelle dans chaque méthode d'action et choisir vos vues en conséquence. Ou utilisez une vue générique et transmettez-lui un modèle à analyser (même si c'est un peu plus avancé). – Simon

+0

Quelle logique conditionnelle? J'ai besoin de contrôleur pour transmettre des données à deux vues en même temps. Ce n'est pas possible? –

0

D'après ce que j'ai compris jusqu'à présent, vous voulez qu'une action du contrôleur renvoie deux vues. Je pense en quelque sorte que ce n'est pas possible.

Vous avez mentionné que les vues sont utilisées pour afficher des données identiques de différentes manières. Ma suggestion serait de retourner un de l'action du contrôleur et de construire le côté client de vue.

+0

oups - basé sur votre commentaire que j'ai maintenant lu correctement, vous pouvez le faire après tout. – Ahmad

Questions connexes