2012-02-20 2 views
0

MVC 컨트롤러에 모델과 문자열을 전달하는 (또는 전달하려고하는) JS가 있습니다.자바 스크립트에서 MVC3 컨트롤러로 모델 및 추가 매개 변수 게시

JS 코드는 다음과 같습니다

$.ajax({ 
    url: self.ajaxValidationUrl, 
    type: "POST", 
    data: { model: $("form").serialize(), stepList: thisStepList }, 
    async: false, 
    success: function(errors) { 
     console.log("Errors..."); 
     if (errors.length > 0) { 
      anyServerError = true; 
     } 
     for (var i = 0; i < errors.length; i++) { 
      console.log(errors[i].ErrorMessage); 
      self.errorList += "<li>" + errors[i].ErrorMessage + "</li>"; 
     } 
    } 
}); 

컨트롤러는 다음과 같습니다

[HttpPost] 
public ActionResult ValidateReport(MyTemplate model, string stepList) 
{  
    var errors = model.Validate(); 
    return Json(errors); 
} 

모델 매개 변수가 비어과에 MyTemplate 개체에 해결되지 않습니다. 게시물 매개 변수가 확인 중입니다.

+0

피들러 또는 방화범 입력란에 게시 된 값을 게시 할 수 있습니까? MyTemplate 클래스도 게시하십시오. – Rafay

+0

게시중인 데이터에 문제가있는 것 같습니다. '$ ("form") serialize()'는 폼을 포스트 데이터 ('foo = bar & bar = baz')로 serialize 한 다음, 객체를'data'로 전달하기 때문에 jQuery가이를 다시 직렬화합니다. 그래서'model = foo % 3Dbar % 26bar % 3Dbaz & stepList = ...'와 같은 것을 게시 할 것입니다. 서버는 어떤 형식으로 데이터를 예상합니까? 나는'serialize'를'serializeArray'로 변경하는 것이 트릭을 할 수 있다고 생각합니다. –

+0

여기 응답의 샘플입니다 : 모델 \t ReportId = c86b8427-e249-4384 - bc47-5300b2f9e346 및 사용자 아이디 = ee733263-8fe3-41a9 - b511-7e501e0bf2df 및 회사 ID = 10c5caf6-b50f-4b31-8842-4a257dde9275 & REPORTNAME = 테스트 + 이제 & TimePeriodType = 어제 stepList \t ReportName, ReportList, ReportTypes – Matt

답변

0

나는 어딘가에있는 JSON 모델 바인더를 가지고 있는데, 그 곳은 나를 도망 갔지만 이것을 보았다.

public class FromJsonAttribute : CustomModelBinderAttribute 
    { 
     private readonly static JavaScriptSerializer serializer = new JavaScriptSerializer(); 



public override IModelBinder GetBinder() 
    { 
     return new JsonModelBinder(); 
    } 

    private class JsonModelBinder : IModelBinder 
    { 
     public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
     { 
      var stringified = controllerContext.HttpContext.Request[bindingContext.ModelName]; 
      if (string.IsNullOrEmpty(stringified)) 
       return null; 
      return serializer.Deserialize(stringified, bindingContext.ModelType); 
     } 
    } 
} 

이렇게하면 컨트롤러에서이를 수행 할 수 있습니다.

[HttpPost] 
public ActionResult GiftsCOG([FromJson] List<GiftModel> gifts, [FromJson] string guid) 
{ 
} 

이것은 당신이 자바 스크립트에서 JSON을 통과 할 수 있습니다.

+0

나는 이것을 작동시킬 수 없었다. 이 메서드를 사용하여 모델을 바인딩하는 것은 좋지 않았습니다. – Matt

+0

도움 받기를 원한다면, 기꺼이 도와 드리겠습니다. 내 앱에서 좋은 점을 발견했습니다. 코드 통합. 그러나 당신이이 방법을 좋아하지 않으면, 나는 더 이상 세부 사항을 게시하는 것을 괴롭히지 않을 것이다. – Etch

관련 문제