직렬화하고 AJAX를 통해 컨트롤러에 전달하려는 div 내부에 여러 컨트롤이있는 뷰가 있습니다. 뷰의 SchoolType 필드는 select2 다중 선택 드롭 다운입니다.
모델 :
public class SchoolModel
{
public string StudentName{ get; set; }
public List<string> SchoolType{ get; set; }
public List<SelectListItem> SchoolTypeList{ get; set; }
}
보기 :
<div id="divSchool">
<div class="row">
<div class="col-md-12">
<div class="col-md-6">
<div class="form-group">
<label asp-for="SchoolType" class="col-md-3 control-label">School Type</label>
<div class="col-md-9">
<select asp-for="SchoolType" asp-items="Model.SchoolTypeList" class="form-control medium"></select>
</div>
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label asp-for="StudentName" class="col-md-3 control-label">Student Name</label>
<div class="col-md-9">
<input asp-for="StudentName" class="form-control" />
</div>
</div>
</div>
</div>
</div>
</div>
제어 장치:
[HttpPost]
public ActionResult Index(SchoolModel model)
{
}
내 JS 코드 :
$('#SchoolType').select2({
placeholder: "Filter by school"
}
$("document").on("click", ".btnCheck", function () {
var model = $('#divSchool').find('select, textarea,input').serialize();
$.ajax({
url: "/Student/Index",
type: 'POST',
data: { model: model },
cache: true,
async: true,
}).done(function (result) {
}).fail(function (error) {
})
});
그러나 직렬화 된 div는 다음과 같이 나타납니다.
model = "StudentName=Test&SchoolType=1b&SchoolType=26a"
이 값은 클라이언트 측에 있지만 AJAX에서는 StudentName 값이 정상적으로 표시되는 반면 SchoolType 값은 컨트롤러의 서버 측에서 null로 표시됩니다. 이 문제를 어떻게 해결합니까?
가능한 문제 : SchoolType 값이 문자열 목록이기 때문에 개별 문자열에 매핑되지 않습니다.
편집 1 : div를 양식으로 변경하려고 시도했지만 동일한 문제가 지속됩니다.
편집 2 :이 문제는 선택 이름을 변경하여 PHP에서 처리됩니다. 이 답변 은 예를 보여줍니다.
직렬화 부분을 조작 할 수 있는지 잘 모르겠습니다. 그 구조를 수동으로 얻을 수 있습니다.
serialize ()를 사용하여 수행하는 방식과 같은 다른 컨트롤을 직렬화하고 모델에 할당 할 수 있습니다. 그리고 Select2의 경우 이렇게하여 모델에 추가합니다.
model = {};
$(".select2").each(function () {
var selectedValue = $(this).val();
if (selectedValue != null) {
model[this.name] = selectedValue;
}
});
그러면 필요한 구조가 제공됩니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다