2011-08-16 4 views
0

J'essaie de mettre en place une application MVC qui n'est pas un typique créer un enregistrement et présenter l'enregistrement à l'utilisateur.Comment obtenir ASP.NET MVC pour ouvrir une nouvelle fenêtre?

Je trouve certaines choses qui ne sont pas amicales dans MVC car elles sont dans des formulaires Web. Ma vue comporte deux listes déroulantes, une zone de texte et un bouton de soumission. Dans l'une des listes déroulantes, je dois le préremplir avec des codes et une description. Cette partie est terminée.

Ensuite, l'utilisateur saisit du texte dans la zone de texte. Ils cliquent sur un bouton Trouver. Trouver remplira la deuxième liste déroulante. Sans viewstate, le code est un peu différent mais possible. Ensuite, l'utilisateur clique sur le bouton Envoyer. Voici la partie délicate. J'ai besoin de l'entrée de la vue pour générer un fichier PDF, puis ouvrez une nouvelle fenêtre de navigateur ou un onglet pour afficher le fichier PDF.

Je veux également supprimer le PDF du serveur avant de le présenter. Je peux supprimer le PDF avant de le présenter dans des formulaires Web. J'ai trouvé Actionlink peut ouvrir une nouvelle fenêtre, mais Actionlink ne pousse pas l'entrée sur la vue au contrôleur. Un bouton d'envoi de formulaire standard le fait, mais un bouton d'envoi n'ouvre pas une nouvelle fenêtre. Un contrôleur ne peut pas non plus ouvrir une vue dans une nouvelle fenêtre.

Comment puis-je obtenir la saisie des utilisateurs et pousser cette entrée vers le contrôleur, puis afficher le PDF généré dans une nouvelle fenêtre de navigateur? En plus de cela, j'ai besoin de supprimer le PDF du serveur.

Répondre

0

Vous pouvez renvoyer une vue avec du javascript ouvrant d'abord une nouvelle fenêtre, puis actualisant une autre vue. Si aucun javascript n'est actif, la vue ne serait pas rechargée et un lien serait ouvert manuellement. Si vous créez le PDF en mémoire, il n'y a rien que vous ayez besoin de supprimer, il suffit de diffuser le PDF en mémoire au client. Je suis nouveau à MVC moi-même, c'est juste une idée.

1

Simple créer une action qui retourne votre flux PDF comme FileResult

Si vous générez votre pdf à un flux de mémoire: (Je recommande ce):

public ActionResult DownloadPdf() 
{ 
    // you need some code here to generate the pdf to the memory stream. 

    return File(stream, "application/pdf", "DownloadName.pdf"); 
} 

Ou si vous préférez, utilisez cheminFichier directement:

public ActionResult DownloadPdf() 
{ 
    // get pdf filepath 
    var path = "Chap0101.pdf"; 

    return File(path, "application/pdf"); 
} 

Puis dans votre code HTML, vous pouvez utiliser quelque chose comme ça pour ouvrir dans une nouvelle fenêtre.

@Html.ActionLink("Download pdf in new window", "DownloadPdf", "ControllerName", null, new { target = "_blank" }) 
Questions connexes