2017-01-11 4 views
1

Привет У меня есть Лил JQuery скриптJQuery скрипт в MVC макете не работает

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

Когда я включаю его непосредственно на страницу макета моего приложения MVC это работает, как я ожидал. Когда я пытаюсь вызвать его из внешнего файла (infoAjax.js), он терпит неудачу, и я получаю сообщение: Не удалось загрузить ресурс: сервер ответил статусом 404 (Not Found). Мой пакет файл:

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

и ответственная часть страницы макета:

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

@ Url.Action не будет работать в файле JS. Это синтаксис Razor, поэтому он должен быть в представлении. Если вы посмотрите на свою вкладку в сети, когда вы запустите ее из внешнего файла, вы, вероятно, обнаружите, что она пытается вызвать URL-адрес буквально, например http: //@Url.Action («AjaxTest», «Home») вместо того, чтобы разрешать его реальный URL-адрес, который он будет делать, если он был в файле cshtml. – ADyson

ответ

2

@ Url.Action ("AjaxTest", "Начало") является доступна только Вид проекта MVC. Попробуйте использовать точный адрес как

url: 'localhost/Home/AjaxTest', 

вместо

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

Я думал, что 404 произошло на ~/Scripts/infoAjax.js, кстати, вопрос был сформулирован. Но это причина, определенно, – zerohero

+0

Единственная небольшая проблема с жестким кодированием URL-адреса заключается в том, что она уязвима для изменений в конфигурации маршрутизации на стороне MVC, что является одной из основных причин с помощью помощника Url.Action. Однако это решение решит ближайшую проблему, как описано в вопросе. – ADyson

+0

@ADyson Вот почему я считаю, что мой ответ подходит к решению, которое можно развернуть, не забывая менять местоположение URL-адреса каждый раз: P – zerohero

3

Как .js файлы не разобранные на ASP.NET MVC вид двигателя, вы просто не можете использовать любой код там. Я хотел бы предложить использовать ненавязчивый подход, что-то вроде этого

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

И в JavaScript, используйте значение данных-запрос-URL

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