반응형
MVC ajax json을 컨트롤러에 게시하는 액션 메서드
복합 오브젝트를 파라미터로 포함하는 컨트롤러 액션메서드에 대한 JQuery AJAX 호출을 실행하려고 합니다.저는 많은 블로그를 읽었고 이것들로부터 배운 몇 가지 기술들을 시도했습니다.제가 베스트 어택 코드를 구축한 주요 포스트(아래)는 stackoverflow 포스트입니다.
사용자가 필드를 탭할 때 호출되는 비동기 투고를 트리거하고 싶다(다른 예시와 같이 폼 저장 투고가 아님).
제 의도는 다음과 같습니다.
- 클라이언트상의 오브젝트를 인스턴스화한다(View 유형을 제공하는 View Model이 아니다).
- 뷰 내의 여러 필드의 데이터로 객체를 채웁니다.
- 이 개체를 JSON으로 변환합니다.
- jQuery를 사용하여 컨트롤러 액션메서드를 호출합니다.Ajax 메서드, JSON 개체를 전달합니다.
결과는 JSON 결과로 반환되며 반환된 결과에 따라 데이터가 보기의 필드에 로드됩니다.
문제는 다음과 같습니다.
- 액션 메서드가 HttpPPost Atribut과 함께 설정되어 있는 경우 컨트롤러의 Action 메서드는 호출되지 않습니다(AJAX 콜타입이 'POST'로 설정되어 있어도).
- 액션 메서드가 HttpGet에 의해 어트리뷰트 되어 있는 경우 파라미터의 속성 값은 null이 됩니다.
- ReadObject 메서드는 "네임스페이스 "에서 요소 "root"을 예상합니다."라는 오류를 발생시킵니다.이름이 'namespace'인 'None'이 발견되었습니다.
누군가 도와줄 수 있길 바라.감사해요.아래 코드:
클라이언트 js 파일
var disputeKeyDataObj = {
"InvoiceNumber": "" + $.trim(this.value) + "",
"CustomerNumber": "" + $.trim($('#CustomerNumber').val()) + ""
};
var disputeKeyDataJSON = JSON.stringify(disputeHeadlineData);
$.ajax({
url: "/cnr/GetDataForInvoiceNumber",
type: "POST",
data: disputeKeyDataJSON,
dataType: 'json',
contentType: "application/json; charset=utf-8",
success: EnrichedDisputeKeyData(result)
});
Action 메서드 매개 변수와 연결된 유형의 Action 필터 및 클래스
[DataContract]
public class DisputeKeyData
{
[DataMember(Name = "InvoiceNumber")]
public string InvoiceNumber { get; set; }
[DataMember(Name = "CustomerNumber")]
public string CustomerNumber { get; set; }
}
컨트롤러의 액션 방식
//[HttpPost]
[ObjectFilter(Param = "disputeKeyData", RootType = typeof(DisputeKeyData))]
public ActionResult GetDataForInvoiceNumber(DisputeKeyData disputeKeyData)
{
//Blah!
//....
return Json(disputeKeyData, JsonRequestBehavior.AllowGet);
}
아래는 제가 이 작업을 하게 된 방법입니다.
요점은 런타임에서 요청 내의 개체를 해결할 수 있도록 뷰와 관련된 View Model을 사용해야 한다는 것입니다.
[디폴트 View Model 오브젝트 이외의 오브젝트를 바인드할 수 있는 방법이 있다는 것을 알고 있습니다만, 그 오브젝트를 동작시킬 수 없었기 때문에 필요에 따라 필요한 속성을 채우는 것만으로 끝납니다]
[HttpPost]
public ActionResult GetDataForInvoiceNumber(MyViewModel myViewModel)
{
var invoiceNumberQueryResult = _viewModelBuilder.HydrateMyViewModelGivenInvoiceDetail(myViewModel.InvoiceNumber, myViewModel.SelectedCompanyCode);
return Json(invoiceNumberQueryResult, JsonRequestBehavior.DenyGet);
}
이 액션 메서드를 호출하기 위해 사용되는 JQuery 스크립트:
var requestData = {
InvoiceNumber: $.trim(this.value),
SelectedCompanyCode: $.trim($('#SelectedCompanyCode').val())
};
$.ajax({
url: '/en/myController/GetDataForInvoiceNumber',
type: 'POST',
data: JSON.stringify(requestData),
dataType: 'json',
contentType: 'application/json; charset=utf-8',
error: function (xhr) {
alert('Error: ' + xhr.statusText);
},
success: function (result) {
CheckIfInvoiceFound(result);
},
async: true,
processData: false
});
언급URL : https://stackoverflow.com/questions/4120212/mvc-ajax-json-post-to-controller-action-method
반응형
'programing' 카테고리의 다른 글
플러그인 업로드 중 업로드된 파일이 php.ini 오류의 upload_max_filesize 지시문을 초과합니다. (0) | 2023.02.25 |
---|---|
워드프레스는 표준 루프를 통해 투고 순서를 변경합니다. (0) | 2023.02.25 |
WP JWT 인증으로 Facebook 로그인 (0) | 2023.02.25 |
Angular에서 fragment 식별자 제거JS URL(# 기호) (0) | 2023.02.20 |
TypeError: 캐시할 수 없는 유형: 'dict' (dict가 다른 dict의 키로 사용되는 경우) (0) | 2023.02.20 |