MVC 직렬화 :이 방법에Asp.net 나는이 양식에 내장 내 모델, 전달해야 ajax.beginForm
using (Ajax.BeginForm("Index", null, new AjaxOptions() { UpdateTargetId = "FormContainer", HttpMethod = "Post", InsertionMode = InsertionMode.Replace, OnSuccess = "successFunc" }, new { id = "UpdateForm" }))
는 :
public ActionResult SavePreset(DocumentFilterModel model, string name)
{
//Do some magic
return PartialView("Partial/FilterListPartial", model);
}
중요한 점은 기본적으로이 양식 보고서 미리 설정을 수집합니다. 그러나 DB에 프리셋을 저장하는 옵션을 추가해야합니다. 따라서 SavePreset
메서드가 필요합니다.
나는이 스크립트를 사용하는 것을 시도했다 :
$("#SavePresetButton").on("click", function() {
$.ajax({
type: "POST",
url: '@Url.Action("SavePreset", "Reports")',
data: {
name: $("#PresetNameEditor").val(),
model: $("#UpdateForm").serialize()
}
}).success(function(result) {
$("#FilterSettingsContainer").html(result);
});
});
을하지만 난 내가 하나가 DocumentFilterModel model
에 null
를 얻을 문제를 발생했습니다 중 (string
로 변경 model
parametr의 유형 경우)를 역 직렬화 할 수 없습니다. 상황이 내가 시도 : 그런데
var SettingsModel = new JavaScriptSerializer().Deserialize<DocumentFilterModel>(model);
var a = JsonConvert.DeserializeObject<DocumentFilterModel>(model);
, (별도의 부분보기에있는이 필터를) 나는 것 그대로 내 양식을 유지하려면, 난 아직 기록의 목록 내 두 번째 부분보기를 업데이트해야하기 때문에 , DocumentFilterModel
이 너무 커서 수동으로 구문 분석 할 수 없습니다.
명시 적으로 역 직렬화 할 필요는 없습니다. 모델 바인더가 그 일을하게하십시오. 'DocumentFilterModel'은 어떻게 생겼습니까? 양식 안의 입력 요소를 어떻게 렌더링하고 있습니까? – Shyju
문제는'DocumentFilterModel' 내부는 약 70+ 속성 (객체 내부에 10 개가 있으며 각각 10 개의 속성이있는 6 개의 다른 객체가 포함되어 있음)입니다. 따라서 수동으로 파싱하는 것은 어떤 비용으로도 피하고 싶은 옵션입니다. 에디터는'ViewData.ModelMetadata.Properties'리스트를 사용하여 생성됩니다. 그래서 내 폼 안에 코드를 포함시키지 않았습니다. 그리고'submit'을 사용할 수 없습니다. 왜냐하면 미리 설정된 저장 메소드는 필터를 사용하여 부분보기를 반환해야하고'submit'은 레코드가있는 부분을 반환해야합니다 ('UpdateTargetId'속성 내부의 충돌). – user7803907