2016-02-10 1 views
3

J'ai un bloc de code comme suit:comment déclencher window.open par Html.ActionLink dans ASP.NET MVC 4

@foreach (System.Data.DataRow drEquipment in Model.EquipmentList.Rows) 
    { 
     <tr> 
      <td valign="top">@drEquipment["ColumnName"]<br /></td> 
      <td valign="top">@drEquipment["ColumnName"] - @drEquipment["ColumnName"]<br /></td> 
      <td valign="top">@drEquipment["ColumnName"]</td> 
      <td valign="top">@drEquipment["ColumnName"] - @drEquipment["ColumnName"]</td> 
      <td>@Html.ActionLink("Güncelle", "UpdateAction", new { SerialNumber = drEquipment["ColumnName"], StockSpecCd = drEquipment["ColumnName"], ResourceSpecTypeCd = drEquipment["ColumnName"] }, new { popup="{\"height\":250, \"width\":350}" })</td> 
     </tr> 
    } 
@Html.ActionLink("Update", "UpdateAction", new { SerialNumber = drEquipment["ColumnName"], StockSpecCd = drEquipment["ColumnName"], ResourceSpecTypeCd = drEquipment["ColumnName"], new { popup="{\"height\":250, \"width\":350}" }) 

Il fonctionne bien comme ça, mais je ne pouvais pas le site du centre popup de la écran. C'est pourquoi j'ai un événement onclick comme suit:

onclick="MyPopup('/Account/UpdateAction', '350', '250')" 

Je ne pouvais pas utiliser une variable comme id à utiliser e.preventDefault parce qu'il ya une instruction foreach.

-je résoudre ce problème sur l'événement bouton de clic et il fonctionne bien:

<button onclick="MyPopup('/Account/UpdateAction', '350', '250')">Update</button> 

function MyPopup(url, width, height) { 
var leftPosition, topPosition; 
//Allow for borders. 
leftPosition = (window.screen.width/2) - ((width/2) + 10); 
//Allow for title and status bars. 
topPosition = (window.screen.height/2) - ((height/2) + 50); 
//Open the window. 
window.open(url, "_blank", 
"status=no,height=" + height + ",width=" + width + ",resizable=yes,left=" 
+ leftPosition + ",top=" + topPosition + ",screenX=" + leftPosition + ",screenY=" 
+ topPosition + ",toolbar=no,menubar=no,scrollbars=no,location=no,directories=no"); 

}

Mais je ne pouvais pas utiliser ma fonction avec Html.ActionLink. J'ai mis un événement onclick en tant que htmlAttritube mais cela n'a pas fonctionné.

Ce dont j'ai exactement besoin, c'est de passer mes paramètres au contrôleur et d'ouvrir une nouvelle fenêtre _blank "centre du site de l'écran". J'ai tous mes besoins sans le dernier.

Comment résoudre ce problème?

+0

Vous ne fournissez pas les propriétés 'url',' largeur' ou 'height' lorsque vous appelez la fonction. Maintenant, j'ai formaté votre question, vous pouvez également voir que vous avez une erreur de syntaxe dans le ActionLink –

+0

Excusez-moi. C'est de ma faute. Mon code exact est le suivant: @ Html.ActionLink ( "Mise à jour", "#", nouveau { SerialNumber = drEquipment [ "SERIAL_NUMBER"], StockSpecCd = drEquipment [ "STOCK_SPEC_CD"], ResourceSpecTypeCd = drEquipment [ » RESOURCE_SPEC_TYPE_CD "], new { popup =" {\ "height \": 250, \ "width \": 350} ", onclick =" MyPopup ('/ Compte/EquipementEdit', '350', '250') " }) J'ai essayé d'utiliser Html.Actionlink, mais je veux également définir le nouveau popup au centre de l'écran. – tdog

+0

Vous pouvez utiliser le bouton 'edit' pour mettre à jour le code dans la question. –

Répondre

0

Avec le code actuel, vous ne transmettez pas les 3 paramètres (url, width et height) à la méthode MyPopup()!

Vous devez obtenir et transmettre l'URL, la largeur et la hauteur cible à votre méthode MyPopup. Pour ce faire, donnez un identifiant au lien et utilisez javascript unobutrisuve pour gérer l'événement click. Vous pouvez conserver la hauteur et la largeur en tant qu'attributs de données html 5 sur le lien.

@Html.ActionLink("Update", "EquipmentEdit", 
       new { SerialNumber = drEquipment["SERIAL_NUMBER"], 
        StockSpecCd = drEquipment["STOCK_SPEC_CD"], 
        ResourceSpecTypeCd = drEquipment["RESOURCE_SPEC_TYPE_CD"] }, 
        new { id="updateLink", data_height="300", data_width="300" }) 

Et dans votre javascript (en utilisant jQuery), écouter l'événement click de ce lien

$(function(){ 

    $("#updateLink").click(function(e){ 
    e.preventDefault(); 

    var url=$(this).attr("href"); 
    var height=$(this).data("height"); 
    var width=$(this).data("width"); 

    alert(height); 
    // execute your custom code for window.open here 
    // call MyPopup(url,width,height); 
    }); 

}); 
+0

J'ai mon bloc de code Html.ActionLink dans l'instruction foreach. Donc, je ne pouvais pas donner un identifiant spécifique.Ajoutez à cela, je me demandais si j'utilise preventDefault, puis-je transmettre mes paramètres que j'ai spécifiés dans ActionLink? Je veux juste passer mes paramètres au contrôleur et ouvrir une nouvelle fenêtre au centre de l'écran. – tdog

+0

Donnez ensuite une classe CSS au lieu de l'ID et utilisez la classe CSS pour lier l'événement click. – Shyju

1

Je l'ai fait ce que je veux une autre façon:

@{ 
     long WarehouseId = string.IsNullOrWhiteSpace(drEquipment["WAREHOUSE_ID"].ToString()) ? 0 : Convert.ToInt64(drEquipment["WAREHOUSE_ID"]); 
     string link = "/Account/EquipmentEdit?SerialNumber=" + drEquipment["SERIAL_NUMBER"] + "&StockCode=" + drEquipment["STOCK_CODE"] + "&WarehouseId=" + WarehouseId + "&WarehouseTypeCode=" + drEquipment["WAREHOUSE_TYPE_CODE"].ToString() + "&WhsStatusType=" + drEquipment["WHS_STATUS_TYPE"].ToString(); 
    } 

    <td><a href="#" onclick="MyPopup('@link', '350', '250');">Update</a></td> 

function MyPopup(url, width, height) { 
    var leftPosition, topPosition; 
    //Allow for borders. 
    leftPosition = (window.screen.width/2) - ((width/2) + 10); 
    //Allow for title and status bars. 
    topPosition = (window.screen.height/2) - ((height/2) + 50); 
    //Open the window. 
    window.open(url, "_blank", 
    "status=no,height=" + height + ",width=" + width + ",resizable=yes,left=" 
    + leftPosition + ",top=" + topPosition + ",screenX=" + leftPosition + ",screenY=" 
    + topPosition + ",toolbar=no,menubar=no,scrollbars=no,location=no,directories=no"); 
} 

Si est un moyen de faire avec Html.ActionLink, je voudrais le savoir. Je ne veux pas voir des attributs comme "un href" dans ma page cshtml.