2013-08-01 2 views
2

J'ai une application MVC2 hébergée dans IIS7 (pool intégré). Le lien que j'utiliser pour accéder à l'application est comme ceContrôleur ASP.Net MVC2 Chemin introuvable IIS7

http://88.88.88.88/testapp/ 

j'invoque la fonction PrintApp de mes « HomeController.cs » comme indiqué ci-dessous.

var printForm = jQuery('<form>', { 
    'method' : 'post', 
    'action' : 'Home/PrintApp' 
    .....}); 
printForm .submit(); 

Cette chose fonctionne quand je l'utilise avec Visual Studio Development Serveur. Mais lorsqu'il est déployé sur IIS, il me donne 404 erreur.

J'ai essayé,

'action' : '../Home/PrintApp' 

Mais cela me donne aussi la même erreur. La seule chose qui a fonctionné était

'action' : 'http://88.88.88.88/testapp/Home/PrintApp' 

ce qui n'est pas la meilleure façon de le faire..Peut-on identifier le problème?

+0

essayer ~/Accueil/PrintApp ' –

+0

@JeevanJose - est-ce que le travail dans les fichiers .js je vais essayer .. – vinayan

+0

Oui,? cela devrait. –

Répondre

1

Si le JavaScript est appelé à partir d'une vue, vous pouvez utiliser à la place (cela suppose moteur vue Razor ... pour ASPX, il sera légèrement différente):

var printForm = jQuery('<form>', { 
    'method' : 'post', 
    'action' : '@Url.Action("PrintApp", "Home")' 
    .....}); 
printForm .submit(); 

Si elle est Appelé d'ailleurs, vous devrez fournir une référence complète à l'emplacement de votre action de contrôleur.

EDIT: Quelque chose comme ça fonctionnerait?

Dans les .js:

function submitPrintForm(formLocation) { 
    var printForm = jQuery('<form>', { 
     'method' : 'post', 
     'action' : formLocation 
     .....}); 
    printForm .submit(); 
} 

Dans la vue, où que vous devez appeler la fonction:

submitPrintForm('@Url.Action("PrintApp", "Home")'; 
+0

merci..mais il n'est pas appelé à partir d'une vue .. – vinayan

+0

Où sont vous l'appelez? Mon montage fonctionnerait-il? –

1

modifier cette ligne 'action' : 'Home/PrintApp', à ceci:

'action' : $('#printAppUrl').val(); 

Ensuite, côté serveur dans la vue, définissez la valeur d'un champ masqué nommé printAppUrl à ceci:

@Html.Hidden("printAppUrl", Url.Action("PrintApp", "Home")); 

Une autre chose à essayer est:

'/Home/PrintApp' 

Je dis que parce que, après la génération moi-même une forme dans une application de test qui est ce l'URL ressemblait.

+0

cela devrait fonctionner je crois ... mais il ressemble plus à une solution de contournement .. – vinayan

+0

Il va certainement fonctionner, et j'ai presque upvoted il, mais il se sent juste comme une solution "sale". –

+0

@vinayan, vous pouvez également essayer ''/ Home/PrintApp''. –

2

Vous avez écrit le code javascript suivant dans un événement qui est déclenché lors d'une interaction avec un élément DOM tel qu'un bouton ou une ancre, n'est-ce pas?

tels que:

$('#foobar').click(function() { 
    var printForm = jQuery('<form>', { 
     'method' : 'post', 
     'action' : 'Home/PrintApp' 
     ....... 
    }); 
    printForm.submit(); 
}); 

donc, vous pouvez ajouter l'URL de la forme comme data-* attribut à l'élément correspondant:

<button id="foobar" data-url="@Url.Action("PrintApp", "Home")">Click me</button> 

puis:

$('#foobar').click(function() { 

    var printForm = jQuery('<form>', { 
     'method' : 'post', 
     'action' : $(this).data(url) 
     ....... 
    }); 
    printForm.submit(); 

}); 
1

Le le problème est les chemins absolus et relatifs. L'un d'entre eux devrait travailler pour vous:

var printForm = jQuery('<form>', { 
'method' : 'post', 
'action' : '~/Home/PrintApp' 
.....}); 
printForm .submit(); 

OU

var printForm = jQuery('<form>', { 
'method' : 'post', 
'action' : '../../Home/PrintApp' 
.....}); 
printForm .submit(); 
Questions connexes