2017-01-11 1 views
1

Hallo Ich habe ein litle jquery Skriptjquery Skript in mvc Layout funktioniert nicht

$(document).ready(function() { 
     $.ajax({ 
      url: '@Url.Action("AjaxTest", "Home")', 
     }) 
    }); 

Als ich es direkt in der Layout-Seite meiner MVC-Anwendung sind es funktioniert, wie ich erwartet. Wenn ich versuche, es aus einer externen Datei (infoAjax.js) aufzurufen, schlägt es fehl und ich bekomme eine Nachricht: Ressource konnte nicht geladen werden: Der Server hat den Status 404 (Nicht gefunden) erhalten. Meine Bundle-Datei:

bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
        "~/Scripts/bootstrap.js", 
        "~/Scripts/respond.js", 
        "~/Scripts/infoAjax.js" 
       )); 

und verantwortliche Teil der Layoutseite:

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/bootstrap") 
@RenderSection("scripts", required: false) 
+2

@ Url.Action wird in einer JS-Datei nicht funktionieren. Das ist Razor-Syntax, also muss es in einer Ansicht sein. Wenn Sie Ihre Netzwerkregisterkarte beim Ausführen von der externen Datei betrachten, werden Sie wahrscheinlich versuchen, eine URL wie http: //@Url.Action ("AjaxTest", "Home") aufzurufen, anstatt sie zu lösen die echte URL, die es tun würde, wenn es in einer cshtml-Datei wäre. – ADyson

Antwort

2

@ Url.Action ("AjaxTest", "Home") ist avaible nur Blick auf MVC-Projekt. Versuchen Sie die genaue Adresse zu verwenden, wie

url: 'localhost/Home/AjaxTest', 

statt

url: '@Url.Action("AjaxTest", "Home")', 
+0

Ich dachte, die 404 passiert auf ~/Scripts/infoAjax.js durch die Art und Weise der Frage formuliert wurde. Aber das ist der Grund, definitiv – zerohero

+0

das einzige kleine Problem mit hart-Codierung der URL ist, dass es anfällig für Änderungen in der Routing-Konfiguration auf der MVC-Seite ist, die eine Hauptursache von der Url.Action Helfer ist. Diese Lösung löst jedoch das in der Frage beschriebene unmittelbare Problem. – ADyson

+0

@ADyson Deshalb denke ich, dass meine Antwort zu einer Lösung passt, die ohne vorherige Änderung des URL-Standorts implementiert werden kann: P – zerohero

3

Als JS-Dateien werden nicht von asp.net MVC-Ansicht-Engine analysiert, man einfach keinen Code in es verwenden können. Ich würde vorschlagen, unaufdringlich Ansatz, so etwas wie diese

<div id="loader" data-request-url="@Url.Action("Action", "Controller")"></div> 

Und in Javascript, verwenden Sie Wert der Daten-Anfrage-URL

$(function(){ 
    $('#loader').click(function(){ 
     var url = $(this).data('request-url'); 
     alert(url); 
    }); 
});