2009-06-15 4 views
4

나는 진짜 간단한 문제가 있지만 알아낼 수는 없다..NET MVC window.location에 대한 jQuery 상대 경로

MVC가 URL (모든 경로 정보 포함)을 작성하는 방식 때문에 다음은 작동하지 않습니다. 가상 디렉터리 경로 만 반환하도록 pathname을 지정합니다.

사용자가 드롭 다운 목록에서 ID를 선택하면 다른 경로로 리디렉션됩니다.

$(document).ready(function() { 
    $('#TransactionIds').change(function() { 
     document.location = window.location.pathname + "/CeuTransaction/Index/" + $('#TransactionIds').val(); 
    }); 
}); 

답변

9

경로를 작성하려면 UrlHelper를 사용하십시오. 웹 서버 루트를 기준으로 응용 프로그램의 위치를 ​​고려합니다.

$(document).ready(function() { 
    $('#TransactionIds').change(function() { 
     document.location = '<%= Url.Action("Index", "CeuTransaction") %>' 
          + '/' 
          + $('#TransactionIds').val(); 
    }); 
}); 

대안 : 함수가 자바 스크립트 라이브러리에 포함될 수 있도록 (또는 여전히 뷰 마스터로부터 호출 될 필요)의 두 부분으로 분할. 약간의 작업만으로도 jQuery 확장 기능을 구현할 수 있습니다. 뷰에서

function redirectOnChange(selector, action) 
{ 
    $(selector).change(function() { 
     document.location = action + '/' + $(selector).val(); 
    }); 
} 

:

$(function() { 
    redirectOnChange('#TransactionIds', 
        '<%= Url.Action("Index", "CeuTransaction") %>'); 
}); 
+0

사과 :

<input type="hidden" value="<%= Url.Content("~/CeuTransaction/Index/") %>" id="pathname" /> 

은 JS 스크립트 라이브러리에서 다음을 사용했다. 나는이 스크립트가 페이지 자체가 아니라 스크립트 라이브러리에 들어 있다고 언급하는 것을 잊어 버렸다. – Rake36

+0

제 답변을 해결했습니다. – tvanfosson

+0

감사합니다. 스타일의 관점에서 볼 때 항상 웹 페이지에서 JS를 완전히 제거하려고합니다. 나는 당신의 해결책을 좋아한다. 그리고 내가 그것을 사용할 수 없다면 내가 더 편하게 느끼는 어떤 것이 떠오른다. 나는 jQuery를 배우는 프로토 타입 .js 사용자이기 때문에 가능한 모든 가능성을 알지 못한다. – Rake36

6

여기 내가 뭘 결국거야.

페이지에 숨겨진 텍스트 필드를 추가 :

// The following line enables jQuery intellisense 
/// <reference path="jquery-1.3.2-vsdoc.js" /> 

$(document).ready(function() { 
    $('#TransactionIds').change(function() { 
     document.location = $('#pathname').val() + $('#TransactionIds').val(); 
    }); 
}); 
+0

면도날 엔진을 사용하는 MVC3 사용자의 경우 '