2011-08-02 8 views
5

Je dois ouvrir une nouvelle fenêtre contextuelle en cliquant sur un bouton dans une vue. La nouvelle fenêtre doit être redirigée vers une méthode spécifique d'action dans un contrôleur spécifique. Je dois également fournir des attributs pour la taille de la nouvelle fenêtre contextuelle. J'ai essayé le code suivant:Fenêtre contextuelle MVC 3 Razor

<input type="button" name = "ClickMe" Value="ClickMe" onclick= "javascript:window.open('/Home/Create/','Customer Search',height='window.screen.height - 100', width='200',left='window.screen.width - 250' ,top='10',status='no',toobar='no',resizable='yes',scrollbars='yes')"/> 

Sur clic de bouton, rien ne se passe. Je me l'erreur suivante Javascript:

Line: 19
Char: 1
Error: Invalid argument.
Code: 0

Quand je vérifie la ViewSource du rendu HTML, je trouve la ligne à celui qui est rendu sur le bouton. J'utilise Windows Vista avec IE 7. Je travaille sur MVC 3 avec le moteur de rasoir dans VS 2010

Répondre

13

Respect html. Respectez javascript. Respectez le cadre sur lequel vous écrivez, qui a fait deux grands changements (validation et ajaxité) de sa 2ème version à la 3ème pour appliquer le nouveau principe moderne - Unobtrusive Javascript. Vous pourriez corriger cette erreur en moins de temps que vous avez passé à poser des questions ici si vous avez suivi ce principe (avec l'aide de vs javascript synthax mettant en évidence).

<input type="button" id="ClickMe" name = "ClickMe" Value="ClickMe" /> 
... 
    <script type="text/javascript"> 
      $(function() { 
       $('#ClickMe').click(function() { 
        window.open('/Home/Create/', 'CustomerSearch', 'height=' + (window.screen.height - 100) + ',width=200,left=' + (window.screen.width - 250) + ',top=10,status=no,toolbar=no,resizable=yes,scrollbars=yes'); 
       }); 
      }); 
    </script> 

Et comme je l'ai découvert, c'est le problème avec l'espace dans le nom de la fenêtre dans IE - 'Recherche de clients'. Si vous supprimez cet espace - 'CustomerSearch', il commencera à travailler dans IE aussi

+0

Merci pour la réponse rapide. Mais le problème persiste. – Vipul

+0

Voir ma mise à jour – archil

5

Le code HTML fourni a quelques bizarreries sur les ' personnages du onclick. Essayez et modifier les suivantes (linebreaks ajoutée pour une meilleure lisibilité):

<input type="button" 
     name="ClickMe" 
     value="ClickMe" 
     onclick="javascript:window.open('/Home/Create/', 
             'Customer Search', 
             'height=' + (window.screen.height - 100) + ',width=200,left=' + (window.screen.width - 250) + ',top=10,status=no,toolbar=no,resizable=yes,scrollbars=yes');"/> 

changements notables:

  • Troisième argument à window.open() est une chaîne JavaScript avec des valeurs de calculs insérés
  • Arguments dans la chaîne de configuration a ' retiré
  • toobartoolbar.

Sur la base archil's update il semble qu'il a frappé le clou:

var windowObjectReference = window.open(strUrl, strWindowName[, strWindowFeatures]); 

strWindowName
This is the string that just names the new window. Such string can be used to be the target of links and forms when the target attribute of an <a> element or of a <form> is specified. This string parameter should not contain any blank space. strWindowName does not specify the title of the new window. (source)

+0

Merci pour la réponse rapide. Je déteste dire cela mais un "'" manque immédiatement après "scrollbars = yes". Même après la rectification, le problème persiste. D'autres suggestions? – Vipul

+0

@Vipul Ouh, vous avez raison. C'est réglé maintenant, mais je crois qu'archil a frappé le clou avec le nom de la fenêtre ('CustomerSearch'), cf. ['window.open' sur MDN] (https://developer.mozilla.org/en/DOM/window.open):" Ce paramètre de chaîne ne doit contenir aucun espace vide. " – jensgram

+0

Merci. Je me souviens maintenant de quelque chose que j'ai fait il y a 2 ans où le nom de la fenêtre devait fournir pour ouvrir une nouvelle fenêtre. – Vipul

0
<script type="text/javascript"> 
    //script for loading value to division 
    $(function() { 
     $('form').submit(function() { 
      $.ajax({ 
       url: this.action, //you can redirect to your specific controller here.. 
       type: this.method, 
       data: $(this).serialize(), 
       success: function (result) { 
        $('#popUp').html(result); 
       } 
      }); 
      return false; 
     }); 
    }); 
</script> 

<script type="text/javascript"> 
    //Script for pop up dialog. 
    $(function() { 
     $('form').submit(function() { 
      $("#popUp").dialog({ 
       modal: true, 
       resizable: false 
      }); 
     }); 
    }); 
</script> 

<div id="popUp" > 
</div>