2009-09-15 6 views
5

안녕하세요,ASP.NET MVC를 JQuery와 함께 사용할 때 URL을 하드 코딩하지 않는 가장 좋은 방법

저는 jquery로 ASP.NET MVC를 사용하고 있습니다. 그냥, 저를 괴롭히는 한 가지 질문이 있습니다. jquery 메서드에서 어떻게 URL을 처리해야합니까? 난 정말 여기처럼 하드 코드 그것을 좋아하지 않을 :

$(function() { 
     $.getJSON("/Home/List", function(data) { 
      var items = "---------------------"; 
      $.each(data, function(i, country) { 
       items += "" + country.Text + ""; 
      }); 
      $("#Countries").html(items); 
     }); 

     $("#Countries").change(function() { 
      $.getJSON("/Home/States/List/" + $("#Countries > option:selected").attr("value"), function(data) { 
       var items = "---------------------"; 
       $.each(data, function(i, state) { 
        items += "" + state.Text + ""; 
       }); 
       $("#States").html(items); 
      }); 
     }); 
    }); 
이 높은 경우 있도록 Html.ActionLink, Html.BeginForm 같은 MVC에서 링크를 만들 HTML 헬퍼 메소드를 사용하는 것이 좋습니다

사람을 변화 HomeController가 Home 대신 MyHome에 매핑되면 문제가 없습니다.

예를 들어 URL을 하드 코딩하지 않으려면 어떻게해야합니까?

또한이 답변 asp-net-ajax-vs-jquery-in-asp-net-mvc에 동의하기 때문에 ASP.NET Ajax를 사용하고 싶지 않습니다.

감사

내가 사용하고

답변

6

여러 글로벌 자바 스크립트 변수를 정의 할 수 있습니다 다음 $ .getJSON 방법으로 나중에 사용됩니다

<script type="text/javascript"> 
    var listUrl = '<%= Url.Action("Index", "Home") %>'; 
    var statesListUrl = '<%= Url.Action("States", "Home") %>'; 
</script> 

.

+0

이것은 좋은 방법입니다. 감사합니다 –

+0

어쩌면 전역 범위를 피하고 더 나은 네임 스페이스 (예 : ajaxUrlStack.myurl1)를 사용해야합니다. – umpirsky

1

정말 간단하고 실용적인 접근 방식은 모든 마스터 페이지의 상단에 이런 식으로 뭔가를 넣어하는 것입니다

<script type="text/javascript"> 
    var baseUrl = '<%= Url.Resolve("~") %>'; 
</script> 

하고 이후 모든 자바 스크립트 파일을 포함, 필요할 때마다 baseUrl을 사용하십시오.

+0

답장을 보내 주셔서 감사합니다. 이것은 내가 실제로 적용해야 할 충고이다. 그러나 나에게 더 중요한 것은 URL 자체를 하드 코딩하지 않는 방법, 홈/색인입니다. Product/ShowAll 등 ... –

1

저는 종종 현재 컨트롤러와 동작이 js에서만 필요합니다. 그게 내가 왜 내 MasterPage에 포함 시켰는지.

<script type="text/javascript"> 
    var controller = ''; 
    var action = ''; 
    controller = '<%= ViewContext.RouteData.GetRequiredString("controller")%>' ; 
    action = '<%= ViewContext.RouteData.GetRequiredString("action")%>' ; 
    </script> 
+0

위대한 기술로 jquery에서 컨트롤러 이름을 가져 오는 방법을 찾으려고했습니다. – jaekie

관련 문제