2009-10-11 4 views
1

MVC 컨트롤러에서 일부 데이터를 검색하기 위해 JQuery의 getJSON 메서드를 사용하고 있습니다.

[AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult GetContacts(int? numberOf) 
    { 
     List<Contact> contacts = 
      (numberOf != null && numberOf > 0) ? 
       _provider.GetContacts(Convert.ToInt32(numberOf)): 
       _provider.GetContacts(); 

     return Json(contacts); 
    } 

아이디어는 "numberOf"이 공급되면 I 모두 주소록 또는 연락처 주어진 수의 양을 공급하기 위해 제어기 방법을 사용할 수 있다는 것이다.

문제는 "contacts/GetContacts/5"에 GET 요청을 보낼 때 내 컨트롤러의 "numberOf"가 항상 null이라는 것입니다. 그러나 "Contacts/GetContacts /? numberOf = 5"로 GET 요청을 보내면 예상대로 작동합니다.

getContacts: function(numberOf){ 
    var path = "/Contact/GetContacts/"; 
     path = (numberOf<=0) ? path : "/Contact/GetContacts/" + numberOf; 

    $.getJSON(path, null, 
     function(json){ 
     $.each(json, function(){  
     $('tbody','#contacts').append(
      "<tr id=\"contact-"+ this.Id +"\">" 
      + "<td>"+ this.Id +"</td>" 
      + "<td>"+ this.FirstName +"</td>" 
      + "<td>"+ this.LastName +"</td>" 
      + "</tr>" 
     ); 
     }); 
    }); 
    }, 

답변

2

당신은 아마 라우팅 문제가 -이 두 수정 중 하나를 적용하려고 : 도움이된다면

, 여기에 자바 스크립트 메소드의

  1. (간단하지만 어쩌면 조금 추한)
    numberOf 매개 변수의 이름을 id으로 변경하여 기본 경로로 선택하십시오.

  2. (조금 더 일하지만, 더 나은 모양 코드 - 적어도이 방법)
    이 global.asax.cs에 경로 colleciton에 다음 경로를 추가

    routes.MapRoute(
        "ContactsRoute", 
        "Contacts/GetContacts/{numberOf}", 
        new { controller = "Contacts", action = "GetContacts", numberOf = null } 
    ); 
    
+0

그 말이 맞다고 생각하지 마십시오. numberOf가 10이면 경로는 다음과 같습니다. "/Contact/GetContact/10"...이 접근 방식에서 numberOf 또는 id에 대한 참조가 없습니다. {numberOf}를 경로 테이블에 추가하면 아무 것도하지 않습니다. 내가 틀렸다면 나를 바로 잡아주세요. – Amir

+0

은 쿼리 문자열을 전달하면 제대로 작동하지 않는 것처럼 보입니다. – scottm

+0

먼저 경로를 정의 했으므로 첫 번째 방법을 먼저 사용했습니다. 첫 번째 제안이 효과적 이었으므로 라우팅 문제가 발생했습니다. 근본적인 원인은 내가 대신에 기본 경로 아래에 내 경로를 정의했다는 것입니다. 따라서 요청이 기본 경로로 라우팅되고 컨트롤러가 'numberOf'가 아니라 'Id'를 예상했기 때문에 매개 변수에 매핑 할 수 없습니다. 감사합니다. 토마스! – Kappers

관련 문제