2009-06-25 5 views
2

juste une question qui a besoin d'une réponse rapide,ayant des sorties multiples pour une seule action

J'ai une action, permet de dire,

BlogPostController.List(); 

qui répertorie tous les messages dans un moteur de blog hypothétique.

Je veux à la fois une sortie HTML de ces données et une sortie XML de ces données.

De préférence, je voudrais être en mesure de répondre à ces purement par URL, par exemple:

http://MyHypotheticalBlogEngine.com/BlogPosts/List 

http://MyHypotheticalBlogEngine.com/BlogPosts/List.xml 

Et puis quand je l'appelle View() dans ma méthode d'action qu'il avait choisir soit la vue .aspx ou la vue .xml en fonction.

Est-ce que quelque chose est intégré (je ne peux pas trouver d'information à ce sujet, mais je ne peux pas trouver de bons mots-clés pour vraiment le chercher) ou est-ce un autre à votre façon "jobby?

Vive

Répondre

3

Vous devez spécifier un paramètre d'entrée qui peut être vide pour l'affichage par défaut, mais il doit être spécifié pour atteindre les autres formes diverses que vous pourriez vouloir soutenir. Dans le cas d'un lecteur RSS, vous pouvez prendre en charge RSS, ATOM, XML, etc. Choisissez la valeur par défaut, puis ajoutez à votre URL les autres types de formats.

domain.com/blogs/list/ 
domain.com/blogs/list/xml 
domain.com/blogs/list/atom 

etc.

+0

ah, ta :) Solution simple. Vous avez trop raccroché du côté de l'extension: P N'a pas pensé à ajouter un membre supplémentaire au chemin – Sekhat

3

Pour commencer il suffit d'ajouter un paramètre à votre action:

public ActionResult List(string format) 
{ 
    ... 

    if(String.Compare("xml", format, true) == 0) 
    { 
     return View("ListInXml"); 
    } 

    return View("List"); 
} 

Dans vos vues, vous pouvez créer urls à cette action sans modifier votre RouteTable:

<!-- for HTML --> 
<%= Url.Action("list", "blogpost") %> 

<!-- for XML --> 
<%= Url.Action("list", "blogpost", new { format = "xml" }) %> 
Questions connexes