2010-07-09 2 views
1

Je fais une action "Post" ajax et je dois trouver l'URL de mon action.Puis-je mettre ASP.NET dans un fichier Js?

Pour ce faire, je suis en utilisant

var url = '<%= Url.Action("Action", "Controller") %>'; 

Mais vit le code dans un fichier Js assez grand qui charge dans mon MVC View. Je ne veux pas tout déplacer à mon avis car il est trop grand et aura l'air en désordre.

J'ai essayé de configurer mon JS include à runat = "server" mais cette erreur.

<script runat="server" src="<%: ResolveUrl("~/Scripts/Custom/MyScript.js")%>" type="text/javascript" ></script> 

Est-ce que cela peut être fait?

Merci, Kohan

Répondre

5

Non, vous ne pouvez pas mettre ASP.NET dans un fichier javascript. Les fichiers Javascript sont des ressources statiques qui devraient être directement servies par votre serveur web. Ils ne devraient jamais contenir de langage côté serveur. Vous pouvez définir url comme une variable globale dans la vue:

<script type="text/javascript"> 
    var url = '<%= Url.Action("Action", "Controller") %>'; 
</script> 

utiliser cette variable url dans votre fichier javascript.

Notez que, selon ce que vous faites avec cette variable, il peut y avoir de bien meilleurs moyens. Par exemple supposons que votre point de vue que vous avez un point d'ancrage que vous voulez ajaxify:

<%: Html.ActionLink("some text", "actionName", new { id = "fooAnchor" }) %> 

Ensuite, dans votre javascript vous pouvez:

$(function() { 
    $('#fooAnchor').click(function() { 
     $('#result').load(this.href); 
     return false; 
    }); 
}); 

Donc pas besoin de déclarer toutes les variables du tout. Une autre option consiste à définir une fonction javascript qui prend des paramètres pour que vous puissiez le passer comme vous le souhaitez. Conclusion: pensez à vos fichiers javascript en tant que composants réutilisables que demain vous pourriez brancher sur votre site cool basé sur Java Servlets par exemple et les héberger sur un CDN. Vous pouvez même essayer de les convertir en reusable jQuery plugins. N'essayez pas de le mélanger avec les langages côté serveur, car cela mène à un couplage fort, une sale soupe de code-tag.

1

Une autre méthode que je l'ai utilisé est récemment pour créer un objet contenant les actions suivantes: -

<script type="text/javascript">   
    Actions = { 
       Create: "<%= Url.Action("Create") %>", 
       Edit: "<%= Url.Action("Edit") %>", 
       GetGridData: "<%= Url.Action("GetGridData") %>" 
      };   

</script> 

, puis en utilisant que dans le Javascript: -

$(celDiv).html("<a href=" + Actions.Edit + "/" + id + ">" + $(celDiv).text() + "</a>"); 

Il est agréable à utiliser comme les actions sont toutes contenues ensemble dans un seul endroit.

1

Oui, vous pouvez, mais vous ne voulez probablement pas.

Il est tout à fait possible que le pipeline asp.net gère les demandes de fichiers js, c'est juste un cas de configuration de l'association dans IIS. Cependant, il va jouer havok avec intellisense, et sera probablement inutilement confus.

Pour les messages ajax, le meilleur moyen que j'ai trouvé est d'écrire les formulaires avec l'ensemble d'attributs d'action approprié. Lisez ensuite cet attribut en utilisant JS.De cette façon, si vous modifiez l'action de votre formulaire, le JS est également mis à jour. Ceci est également conforme à l'idée que js est là pour ajouter des fonctionnalités à vos pages, pas pour les définir complètement.

+1

Oui. Vous pouvez le faire, mais votre futur soi dit de ne pas le faire. – a7drew

Questions connexes