2010-04-27 4 views
5

마침내 실험을하고 asp.net에서 MVC를 배우려고합니다.
저는 asp.net AJAX PageMethods를 사용하는 데 익숙합니다.이 메소드에서는 매개 변수의 유형에 관계없이 자동으로 파싱되는 객체를 전달할 수 있습니다.MVC 및 jQuery AJAX로 객체를 전달하는 방법은 무엇입니까?

자바 스크립트 :

PageMethods.AddPerson({First:"John",Last:"Doe"}); 

코드 숨김 :

[WebMethod] 
public static Result AddPerson(Person objPerson) 
{ 
    return Person.Save(); 
} 

방법이 MVC와 jQuery를 사용하여 할 것인가?
문자열을 보내고 json을 개체로 구문 분석해야합니까?

답변

4

양식 데이터의 복잡도에 따라 다릅니다.

$.ajax({ 
    url: '\Persons\AddPerson', // PersonsController, AddPerson Action 
    data: { First: "John", Last: "Doe" }, 
    type: 'POST', 
    success: function(data, status) 
    { 
     alert('Method called successfully!'); 
    } 
}); 

그래서 두 가지 데이터를 게시합니다. Person 클래스에 'First'와 'Last'라는 두 개의 속성이 있으면 기본 ASP.NET MVC 모델 바인더는이 양식 데이터를 해당 속성에 넣는 데 아무런 문제가 없어야합니다. 다른 모든 것은 기본값으로 설정됩니다.

물론 Person 유형에 대한 사용자 정의 모델 바인더를 만들 수 있습니다. 그런 다음 원하는 양식 값을 가져 와서 모든 속성에 배치하거나 다른 종류의 논리를 호출 할 수 있습니다.

+0

어떤 하나 개의 매개 변수보다이 방법에 대한? –

+0

각 매개 변수에 대해 MVC는 모든 양식 데이터를 매개 변수 자체 (단순 유형 인 경우) 또는 해당 매개 변수의 모든 등록 정보 (복합 유형 인 경우)에 바인딩하려고 시도합니다. 두 개의 매개 변수가 있고 각 매개 변수에 First 속성이 있으면 둘 다 서버에 게시 된 "First"키에 지정된 값을 가져와야합니다. 하나의 복합 유형에만 바인딩하려는 경우 사용할 수있는 특정 명명 구문이 있습니다. – Tejs

+0

FF로 작동하는 이상한 결과가 있지만 IE의 메소드 매개 변수 뒤에있는 IE는 모든 필드가 null로 초기화 된 객체를 가져옵니다. –

0

컨트롤러의 조치 메소드에 ajax를 통해 양식을 POST 할 때 ModelBinder 구조가 시작되어 게시 된 양식 값을 비즈니스 오브젝트로 구문 분석합니다. 몇 가지 방법으로 모델 바인딩을 활용할 수 있습니다. 위의 예에서

public ActionResult MyAction(MyObject obj) 
{ 
} 

는 ModelBinder를 내재적가 요청에서 수신 된 정보로부터 MyObject 만들려고.

public ActionResult MyAction(FormCollection stuff) 
{ 
    MyObject obj = new MyObject(); 
    TryUpdateModel(obj); 
} 

게시 된 양식 데이터를 우리가 만든 개체에 명시 적으로 바인딩하려고합니다. ModelBinder는 게시 된 값을 객체의 속성과 일치 시키려고 시도합니다.

이러한 경우 중 하나라도 ModelState 개체를 쿼리하여 게시 된 값을 개체로 변환하는 동안 오류가 발생했는지 확인할 수 있습니다.

모델 바인딩에 대한 소개는 see here입니다.

목록 및 사전에 고급 모델을 바인딩하려면 see Phil Haack's post.

0

은 당신이 뭔가를 할 수 있습니다 :

var person = {}; 
person["First"] = $("#FirstName").val(); 
person["Last"] = $("#LastName").val(); 

$.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: "/Admin/AddPerson", 
     data: JSON.stringify(person), 
     dataType: "json", 
     success: function(result) { 

     }, 
     error: function(result) { 

     } 
}); 

다음을 당신의 관리자 컨트롤러 :

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult AddRelease(Person p) 
{ 
    // Code to add person    

} 

JSON.stringify 방법은 here에서 사용할 수 있습니다. Person 객체가 아닌 모델을 매개 변수로 사용하여 모든 유효성 검사를 처리 할 수 ​​있습니다.

+0

$ .ajax 메서드를 사용하면이 비동기 적으로 처리 할 수 ​​있습니다. – jaltiere

2

ASP.NET MVC 액션 메소드에 대한 AJAX 호출을 다루는 게시물이 있습니다. 그것은 다음과 같은 조합을 다룹니다

  • HTTP GET, POST
  • 의 jQuery 방법 $ 갔지, $ .getJSON, $ .post 매개 변수 (문자열과 JSON을 반환 조치 방법
  • 에 매개 변수를 보내는
  • )
,691 AJAX 통해 MVC 부분 뷰로드 동작 방법
  • 전기 폼 데이터
  • AJAX calls to ASP.NET MVC action methods using jQuery

  • +0

    Bob, 링크가 끊어졌습니다. –

    +0

    고마워요! 결정된. – rcravens

    0

    은 내가 사기꾼이고 다음을 수행 같아요

     $("#ProgressDialog").dialog({ 
          autoOpen: false, 
          draggable: false, 
          modal: true, 
          resizable: false, 
          title: "Loading", 
          closeOnEscape: false//, 
    
          // open: function() { $(".ui-dialog-titlebar-close").hide(); } // Hide close button 
         }); 
         $("form").live("submit", function (event) { 
           event.preventDefault(); 
           var form = $(this); 
           $("#ProgressDialog").dialog("open"); 
           $.ajax({ 
            url: form.attr('action'), 
            type: "POST", 
            data: form.serialize(),//USE THIS to autoserialize! 
            success: function (data) { 
             $("#dialog").dialog({height:0}); 
            }, 
            error: function (jqXhr, textStatus, errorThrown) { 
             alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')"); 
            }, 
            complete: function() { 
             $("#ProgressDialog").dialog("close"); 
    
            } 
           }); 
          }); 
         }); 
    
    <div id="ProgressDialog" style="text-align: center; padding: 50px;"> 
        <img src="@Url.Content("~/Content/ajax-loader.gif")" width="128" height="15" alt="Loading" /> 
    </div> 
    
    관련 문제