SlickGrid를 사용하여 MVS 응용 프로그램을 최적화하려고합니다. 그리드 자체는 500-25,000 행의 어디에서나있을 수 있으며 대략 40 개의 열을가집니다. 그리드 자체는 훌륭하게 작동하지만 변경된 데이터를 내 컨트롤러에 게시하여 SQL 측 테이블을 업데이트하는 데 어려움이 있습니다.Slickgrid를 사용하여 MVC에 큰 변경 집합 게시
저축 문제는 MVC의 POST 제한 때문에 발생합니다. 내 web.config에서 maxAllowedLengths를 편집하고 막 시도했습니다. 그러나 무한한 양의 데이터를 게시 할 수 있다고하더라도 더 어렵지 않게 더 똑똑하게 일할 수 있다고 생각합니다.
는 여기에 현재 데이터를 저장하는 방법을 보여주기 위해 몇 가지 시도 사이비 코드입니다 :function Save(data)
{
var changedData = [];
for(i = 0; i < data.length, i++) {
if(data[i].isChanged == 1)
{
changedData.push(data[i]);
//this array of changed objects only contains
//propertys/columns that actually can be changed. About 30 in total.
}
}
//I can currently POST a little more than 5000 rows, anything else and I get a 500 error due
//do the size of my JSON string.
if (changedData.length < 5000)
{
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(changedData),
success: success
});
}else
{
//break changedData into chunks of 5000 and loop through the ajax call.
}
}
가 여기에 변경 사항을 저장하려고 해요 방법은 다음과 같습니다. 여기에는 변경 사항을 대기열에 저장하고 컨트롤러로 전송 한 다음 데이터 서버 측에서 순차적으로 실행합니다.
var pendingChanges = [];
function Save(data)
{
//I would like to be able to do this in one go instead of chunking out the changes
//and finding a way to store them server side before aggregating and running them.
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(pendingChanges),
success: success
});
}
grid.OnCellChange(....)
{
//Update data in cell
pendingChanges.push(ID:item.id, Property:xxx,Value:item.value,TimeStamp:now);
}
function massCellChange()
{
var changedRows = [];
for (i = 0; i < data.length; i++;)
{
if (slickGridDataViewContainsThisItem)
{
changedRows.push(data[i].ID);
//Update slickgrid
}
}
pendingChanges.push(ID:[changedRows],Property:xxx,Value:item.value,TimeStamp:now);
}
컨트롤러 측에서 실제로 방법으로 만들 수있는 한 아무런 문제가 없습니다. 여기서 JavaScriptSerializer를 사용하거나 JSONConvert를 사용하여 내 모델로 변경 집합을 분리합니다.
큰 변경 집합을 저장하는 데 사용할 수있는 다른 패턴도 완전히 열려 있습니다. 한 번에 전체 표를 편집 할 수있는 기능이 있지만, 현재 dataView에 표시된 항목 만 편집 할 수 있기 때문에 단일 사용자가 생성 할 수있는 변경 사항의 수는 상당히 클 수 있습니다. 그 글로벌 명령을 보류중인 단일 변경 사항으로 보내고 싶지만 변경을 실행했을 때 어떤 행이 보이는지 POST하는 우아한 방법을 찾지 못했습니다. (ID : 속성을 ID 배열로 설정하면 작동하지 않습니다. POST 제한과 동일한 문제가 발생합니다.)
감사합니다!
당신의 솔루션은 괜찮아 보입니다. 길이 제한을 없애는 방법이 있다고 확신합니다. 어쩌면이 대답이 당신을 위해 일할 수도 있습니다. Json 데이터의 메가 바이트를 전송하는 프로젝트에서 도움이되었습니다. http://stackoverflow.com/questions/15788342/net-mvc-4-json-post-put-char-limit-in-web-config – Preli