2013-11-28 39 views
2

我有mvc4网页在那里我有一个@Html.TextBox()外部JavaScript不工作,而内部不

@Html.TextBox("searchString", null, new { id = "searchingForProject" })  

该文本框有keyup监听器,将启动项目的AJAX搜索,并更新如果视图结果是成功的

var timeoutReference; 
var timeoutforloading; 
$(function() { 

    $("#searchingForProject").keyup(function() { 
     timeoutReference = setTimeout(function() { 
      timeoutforloading = setTimeout(function() { 
       $("#imageWebGridLoad").show(); 
       $("#gridcontent").hide(); 
      }, 250); 

      var value = $("#searchingForProject").val(); 
      $.ajax({ 
       url: '@Url.Action("Index", "Project")', 
       contentType: 'application/html; charset=utf-8', 
       type: "GET", 
       dataType: 'html', 
       data: { searchString: value }, 
      }).success(function (result) { 

       $('projects').html(result); 
       clearTimeout(timeoutforloading); 
      }); 
     }, 750); 
    }); 
}); 

的问题是,这个功能工作得很好,如果它被放置在内部<script>之内,但如果它被放置在一个外部JavaScript文件,它不会给我任何结果。

我知道它调用该函数,因为$("#imageWebGridLoad").show();将在0.25秒后开始旋转。

在我的Ajax调用中是错误的,还是不可能在像这样的外部js文件中执行它?

+0

将@ Url.Action(“Index”,“Project”)放在外部JavaScript文件中时,它是如何工作的? :) –

回答

5

我不使用MVC4,但我的猜测是,现在的JS是外部的,ASP不会将@Url.Action("Index", "Project")转换为与AJAX一起使用的实际URL。我相信,如果你有这样的信息,在你的HTML隐藏div,然后调用与jQuery选择,你将能够使用它像你想:

// HTML 
<div id="ajaxurl" class="hidden">@Url.Action("Index", "Project")</div> 

// JS 
$.ajax({ 
    url: $('#ajaxurl').text(), 
    // ... 
}) 

(感谢Satpal)

// HTML 
<div id="ajaxurl" class="hidden" data-url='@Url.Action("Index", "Project")'></div> 

// JS 
$.ajax({ 
    url: $('#ajaxurl').data('url'), 
    // ... 
}) 
+1

它更好地添加网址作为数据属性,而不是创建一个隐藏的div – Satpal

+0

感谢您的。好点子。已包含在答案中。 – Andy

+0

第二种方法是我已经使用了几年,因为它从字面上menas您的外部JavaScript是不可知的视图。数据属性是未被使用的! –

1

@ Url.Action(“Index”,“Project”)只会在视图文件中被真实网址替换。在视图文件中声明它为变量。

​​

并从外部.js文件中调用sUrl。

$.ajax({ 
    url: sUrl, 
... 

编辑:

另一种方法周围是通过视图喜欢为你原来的JS。

<script src="@Url.Action("Index", "ExternalJS")"></script> 

并将“ExternalJS”方法放在索引控制器上,用您的原始javascript来服务视图。

+0

出于兴趣,如果OP试图从视图中分离JS,那么如何向视图中引入更多JS有所帮助? – Andy