2011-08-02 28 views
5

Necesito abrir una nueva ventana emergente al hacer clic en un botón en una vista. La nueva ventana debe redirigirse a un método de acción específico en un controlador específico. También necesito proporcionar atributos para el tamaño de la nueva ventana emergente. He estado tratando el siguiente código:Ventana emergente Razor MVC 3

<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')"/> 

El clic del botón, no pasa nada. Consigo siguiente error de Javascript:

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

Cuando compruebo la ViewSource del HTML representado, creo que la línea de ser el que se representa el botón i. estoy usando Windows Vista con IE 7. Estoy trabajando en MVC 3 con la maquinilla de afeitar del motor en VS 2010

Respuesta

13

Respeto. Respeto javascript. Respete el marco en el que está escribiendo, que ha realizado dos grandes cambios (validación y ajaxity) desde su segunda versión hasta la tercera para aplicar el principio más nuevo y moderno: Unobtrusive Javascript. Podrías corregir ese error en menos tiempo que invirtieras haciendo una pregunta aquí si siguieras ese principio (con la ayuda de javascript synthax highlighting).

<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> 

Y como he descubierto, es el problema con el espacio en el nombre de la ventana en IE - 'Customer Search'. Si elimina ese espacio - 'CustomerSearch', comenzará a funcionar en IE también

+0

Gracias por la pronta respuesta. Pero el problema persiste. – Vipul

+0

Ver mi respuesta actualizada – archil

5

El HTML proporcionado tiene algunas peculiaridades de los personajes de la 'onclick. Tratar de editar a los siguientes (los saltos de línea adicional para facilitar la lectura):

<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');"/> 

cambios notables:

  • tercer argumento para window.open() es una cadena JavaScript con los valores de los cálculos insertados
  • Argumentos dentro de la cadena de configuración tiene ' eliminado
  • toobartoolbar.

Basado en archil's update parece que se ha dado en el clavo: html

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

Gracias por la pronta respuesta. Odio decir esto, pero falta un "'" inmediatamente después de "scrollbars = yes". Incluso después de la rectificación, el problema persiste. ¿Alguna otra sugerencia? – Vipul

+0

@Vipul Ouh, tienes razón. Ahora está arreglado, pero creo que Archil ha dado en el clavo con el nombre de la ventana ('CustomerSearch'), cf. ['window.open' en MDN] (https://developer.mozilla.org/en/DOM/window.open):" Este parámetro de cadena no debe contener ningún espacio en blanco. " – jensgram

+0

Gracias. Ahora recuerdo algo que hice hace 2 años cuando el nombre de la ventana tenía que ser suministrado para abrir una nueva ventana. – 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> 
Cuestiones relacionadas