2010-02-23 2 views
2

Je veux montrer le contenu de ViewData, qui détient une chaîne dans mon cas, sur une fenêtre modale. Pour cela, j'utilise le code suivant à mon avis.Comment afficher le contenu de ViewData dans une fenêtre de publication?

<h2><%= Html.Encode(ViewData["Message"]) %></h2> 
<p> 
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>. 
</p> 
<form runat = "server"> 
<div onload = "poponload('<%=ViewData["sample"].ToString()%>')"> 
    <input type="submit" value="show" id="submitBtn"/> 
</div> 
<script type="text/javascript" language="Javascript"> 
    function poponload(msg) { 
    alert(msg.toString().length); 
    if (msg.toString().length > 0) { 
     my_window = window.open("", 
    "mywindow1", "status=1,width=350,height=150"); 
     my_window.document.write(msg.toString()); 
    } 
    } 
</script> 
</form> 

Le contrôleur contient des méthodes d'action simples comme suit.

public ActionResult Index() 
    { 
     ViewData["Message"] = "Welcome to ASP.NET MVC!"; 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Index(FormCollection collection) 
    { 
     ViewData["Message"] = "Welcome to ASP.NET MVC!"; 
     ViewData["sample"] = "My name is kaps"; 
     return View(); 
    } 

Je souhaite afficher le contenu de ViewData ["sample"] à l'aide de Window.open(). Mais ce code est incapable de me montrer la sortie désirée. Quelqu'un peut-il me dire comment je peux y arriver?

Merci.

Répondre

0

Je vous recommande d'utiliser une bibliothèque javascript telle que JQuery. Il existe de nombreux plugins pop-up modaux qui rendent ce genre de chose très simple.

Un de mes préférés est Simple Modal par Eric Martin. Voici un exemple de comment cela pourrait être utilisé pour afficher ViewData.

<script type="text/javascript" language="Javascript"> 
    $(document).ready(function() { 
     $("#sample").modal(); 
    });   
</script> 
<div id="sample"><%=ViewData["key"]%></div> 

Edit:

Pour utiliser window.open voir ci-dessous. Cependant, il ne s'agit pas d'une fenêtre contextuelle modale car elle existe dans une nouvelle fenêtre de navigateur. Ceci est susceptible d'être bloqué par des bloqueurs de popups donc je ne le ferais pas de cette façon.

<script type="text/javascript" language="Javascript"> 
    $(document).ready(function() { 
     var url = "<%= ViewData["key"].ToString() %>"; 
     window.open(url, "DescriptiveWindowName", 
       "resizable=yes,scrollbars=yes,status=yes"); 
    });   
</script> 

De l'mozilla developer page

Comment puis-je savoir si ma fenêtre a été bloquée par un bloqueur de pop-up? Avec les bloqueurs de popups intégrés de Mozilla/Firefox et Internet Explorer 6 SP2, vous devez vérifier la valeur de retour de window.open(): elle sera nulle si la fenêtre n'a pas été autorisée à s'ouvrir. Cependant, pour la plupart des autres bloqueurs de fenêtres contextuelles, il n'existe aucun moyen fiable.

Hope this helps.

+0

Mais comment puis-je faire cela en utilisant Window.open()? –

0

Le javascript est-il en cours d'exécution? Sinon, essayez de mettre la méthode dans la méthode jquery ready.

Quelque chose comme:

<script src="/Scripts/jquery-1.4.1.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     alert(msg.toString().length); 
     if (msg.toString().length > 0) { 
     my_window = window.open("", 
      "mywindow1", "status=1,width=350,height=150"); 
      my_window.document.write(msg.toString()); 
    }); 
</script> 

Si vous expliquer un peu mieux ce qui se passe, il serait plus facile de donner une solution. Je ne suis pas capable d'exécuter le code ici, donc plus d'informations sont nécessaires.

+0

Le script n'est pas en cours d'exécution. J'ai enveloppé le script à l'intérieur de ready(). Mais ça ne marche toujours pas. –

+0

Avez-vous inclus une référence à jquery.js? Ceci est nécessaire pour que $ (document) .ready fonctionne. – gautema

+0

Où l'ajouter et comment l'ajouter? Sur la page maître? –

0

divs ne prend pas en charge l'attribut onload.

déplacez votre code à la balise body à la place.

<body onload = "poponload('<%=ViewData["sample"].ToString()%>')"> 
+0

Je ne veux pas utiliser d'étiquette de corps. Puis-je le faire sans changer le contenu de la page par défaut de la vue MVC. –

Questions connexes