2009-12-16 2 views
0

AJAX 템플릿과 JSON을 사용하여 동적 메뉴를로드하는 MVC 마스터 페이지가 있습니다. JSON은 다음 호출로 반환됩니다.

var tabList = []; //이 돌아 내 HomeController에 JSON

var getTabs = function() { 
    $.getJSON('Home/TabList', null, function (json) { 
     Sys.Observer.clear(tabList); 
     Sys.Observer.addRange(tabList, json); 
    }); 
} 

if (tabList == '') { getTabs(); } 

그래서이 함수를 호출하는 콜백에서 JSON 데이터를 보유 :

public JsonResult TabList() 
    { 
      //get tabs 
      ... //call code to get tabs - removed for ease of reading this question 
      JsonResult jsonTabs = Json(tabItems); 

      jsonTabs.JsonRequestBehavior = JsonRequestBehavior.AllowGet; 

      return jsonTabs; 
     } 
     catch (Exception ex) 
     { throw ex; } 

    } 

이 다음 템플릿에 사용됩니다 바인딩 :

id = "tabTemplate"sys : attach = "dataview"class = "sys-template grid_16 topnav"dataview : data = "{{tabList}}"

anc를 사용하여 메뉴 항목 만들기 HOR 태그 :

SYS : HREF = "{{ '/'+ 컨트롤러 + '/'+ 액션 + '/'}}"목표로부터 등록 정보를 사용하여 메뉴 텍스트 채우기 = "_ 가기"

JSON 개체 :

그때 2 개 개의 다른 MVC 페이지에이 마스터 페이지를 부착

{{텍스트}} ("인덱스"및 "정보", 및 Global.asax에 나를 필요로 "인덱스")

그래서 처음에는 페이지에 들어가서 메뉴가 올바르게 그려지지만, 정보 메뉴를 클릭하면 위에서 "Home/About"링크가있는 템플릿에서 생성 된 다음 작동을 멈 춥니 다. 무슨 일이 일어날 javascript가 올바르게 호출됩니다 (즉 그것은 "getTabs"함수를 호출하고 getJSON 호출을 통과합니다)하지만 JSON을 얻으려면 컨트롤러에 실제로 도달하지 않습니다 (컨트롤러 동작에 브레크 포인트를 넣었습니다. 이 경우에는 명중되지 않는다).

나는 완전히 손실되었고 며칠 동안 이것을 해결하려고 노력 해왔다. 어떤 도움이라도 대단히 감사하겠습니다.

감사합니다.

답변

2

귀하의 .getJSON 요청이 상대 경로 Home/TabList을 호출 중이기 때문일 수 있습니다.

예를 들어 홈페이지에있을 때. http://localhost/ 일 경우 .getJSON 요청은으로 전화를 걸고 작동합니다.

그렇다면 다음 페이지 (예 : 당신이 말한대로 http://localhost/Home/About.getJSON 요청 /Home/TabList

일예로 절대 경로를 호출하려고, 어쨌든

:-) 작동하지 않습니다, http://localhost/Home/About/Home/TabList하는를 호출합니다

$.getJSON('/Home/TabList', null, function (json) { 

참고 : 처음에는 여분의 슬래시가 사용됩니다. 이것은 완벽하게 작동
찰스

+0

HTHs - 정말 감사합니다,이 큰 도움이됩니다! –

관련 문제