2011-12-09 3 views
1

MVC3을 사용하고 있고 jquery를 사용하여 태그 (링크)를 작성 중입니다. 문제는 필자의 링크가 prod 나 dev 중 하나에서만 작동 할 수 있다는 것입니다. 여기 내 사이트의 생산에 url입니다.dev 및 프로덕션 환경에서 기본 URL 가져 오기

http://tvap.mydomain.com

이 내 개발 URL입니다. http://localhost/TVAP

그래서 저는 jquery를 통해 다음과 같이 링크를 만들었습니다. 생산에서

var actionCell = $('#itemlist').find(rowId).find(actionCellId); 
    $('<a>Edit</a>').attr({ 'id': 'edit-' + response.id, 'href': '/Items/Edit/' + response.id }).appendTo(actionCell); 

,이 작동하고,

<a id="edit-17" href="/Items/Edit/17"> 

그러나 개발 (로컬) 나는이 필요할 때 작동하지 않습니다에 링크를 생성합니다.

<a id="edit-17" href="/TVAP/ItemManagement/Edit/17"> 

은 내가

$(location).attr('host') ==> localhost 
$(location).attr('host') ==> http://localhost/TVAP/Items/Index 

어느 너무 적거나 너무 많은 정보를 원하시면에서 다음 얻는다. 나는 내가 localhost를 확인하고 필요에 따라 TVAP를 추가 할 수 있다는 것을 알고 있지만 이것은 해킹처럼 보인다. 다른 개발자는 ASP.NET VS dev 서버를 사용할 수 있으며 localhost를 포함하지만 TVAP가없는 URL을 가져옵니다. 즉 - 이것은 내가 항상 내 _Layout.cshtml에서 할 것입니다 http://localhost:64301/Items/Index

+0

API가 개발중인 Item on 및 ItemManagement에서 지역화 된 이유는 무엇입니까? 청소하십시오. 동일한 API를 사용하십시오. 그렇지 않으면 잠재적 인 오류를 코드에 추가하는 것입니다. 이 작업을 완료하면 URL을 루트 상대가 아닌 페이지 상대로 변경하면 완료됩니다. – Munter

답변

2

:

<head> 
    <!-- other stuff --> 
    <script type="text/javascript"> 
     window.myProjectName = { 
      baseUrl : '@Url.Content("~/")' 
     }; 
    </script> 
    <!-- other scripts --> 
</head> 

그런 다음 당신은 항상 당신의 자신의 자바 스크립트 파일에서 리소스에 액세스하기위한 myProjectName.baseUrl+"Controller/Action" 같은 물건을 사용할 수 있습니다. 이렇게하면 자바 스크립트에서보기를 분리하는 데 도움이됩니다. 이는 정말 좋은 것입니다.

마크 업과 자바 스크립트를 섞어서는 안되며, 이는 절충안입니다.

+0

좋은 아이디어. 내 _Layout.cshtml 파일을 업데이트했습니다. 훌륭하게 작동합니다. –

1

JS가 (외부 JS 파일과 대조적으로) 뷰 내부에 직접있는 경우, Razor를 사용하여 URL을 Javascript로 플러시 할 수 있습니다.

// untested 
var actionCell = $('#itemlist').find(rowId).find(actionCellId); 
$('<a>Edit</a>').attr({ 
    'id': 'edit-' + response.id, 
    'href': '@Url.Action("Edit")/' + response.id 
}).appendTo(actionCell); 
관련 문제