development

외부 js 파일의 Asp.Net Mvc Url.Action?

big-blog 2020. 12. 10. 20:50
반응형

외부 js 파일의 Asp.Net Mvc Url.Action?


외부 js 파일에서 사용할 수 없습니다.

url = "@Url.Action("Action", "Controller")" 
//url output : @Url.Action("Action", "Controller")
//I get IllegalPath Name error.

내가 이렇게 쓸 때 :

url = "/Controller/Action"

그리고 프로젝트가 하위 폴더 아래에 있으면 스크립트가 작동하지 않습니다. 상대 URL로 다음과 같은 것이 필요합니다.

url = "~/Controller/Action"

내가 어떻게 할 수 있니? 감사.


.js 파일은 asp.net mvc 뷰 엔진에 의해 구문 분석되지 않으므로 거기에 C # 코드를 사용할 수 없습니다. 눈에 띄지 않는 접근 방식을 사용하는 것이 좋습니다.

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

그리고 자바 스크립트에서는 data-request-url

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

이것이 가장 우아한 솔루션인지 확실하지 않지만 내가 한 일은 레지스터와 외부 스크립트의 실제 구현을 구별하는 것이 었습니다.

<script>...</script>
... include all the external scripts I need

$(document).ready(function(){

    //get all the information you need from your MVC context 
    //before going out of context and into the scripts
    var url = '@Url.Action("Action", "Controller")'; 


     RegisterMyFunction(url, other parameters ..);
     RegisterAnotherFunction(url, others...);
}

그래서 내 관점에서는 레지스터 기능 만 있고 스크립트에는 내가 원하는 모든 작업을 수행하는 매개 변수로 특수 값이 포함되어 있습니다.

도움이 되었기를 바랍니다.


여기 제가 사용해온 패턴이 있습니다. 조금 더 많은 단계이지만 모든 URL이 View에서 하나의 조직 된 위치에 있다는 점이 마음에 듭니다.

내 뷰의 맨 아래에 다음과 같은 URL이 포함 된 스크립트 섹션이 포함됩니다.

@section Scripts
{
    <script type="text/javascript">
        myJavaScriptObject.firstUrl = '@Url.Action("Action1", "Controller", new {id = Model.Id})';
        myJavaScriptObject.secondUrl = '@Url.Action("Action2", "Controller", new {id = Model.Id})';
    </script>
}

내 JavaScript 클래스 (외부 파일에 있음) 내부에서 URL을 다음과 같이 참조합니다.

var myJavaScriptObject = {
    firstUrl: '',
    secondUrl: '',
    docReady: function() {
        $.get(myJavaScriptObject.firstUrl, function(data) { do something...  });
    }
}

클래스 내에서 항목을 참조 할 필요가 없다는 것을 알고 있지만, 내 관리를 위해 항목을 거기에두고 싶습니다.


설명 된대로 수락 된 답변으로 외부 JS 파일에서 C # 코드를 사용할 수 없습니다. 외부 .js 파일에 몇 개의 컨트롤러 링크를 전달해야하는 경우 일반적으로 수행하는 작업은 다음과 같습니다.

C # (. cshtml)

<script src="~/js/myfile.js"></script>

<script type="text/javascript">

    var url1 =  "@Url.Action("ActionName", "ControllerName", new { Param = ViewBag.Param })";  
    var url2 = "@Url.Action("AnotherAction", "AnotherController")";

    $(function() {
        window.initScript(url1, url2);
    });

</script>

myfile.js에서

var _url1;
var _url2;

function initScript(url1, url2) {
    _url1 = url1;
    _url2 = url2;

   // other init. codes...

}

참고 URL : https://stackoverflow.com/questions/13640559/asp-net-mvc-url-action-in-external-js-file

반응형