문제

jQuery ajax 호출을 통해 데이터를 제출할 때 약간의 털이 문제가 있습니다. 기본적으로 형태 필드의 형태 값 동적으로 추가되었습니다 jQuery를 사용하여 관형 그리드로 화면으로 배치 저장 명령에서 업데이트되지 않습니다.

기본적으로 각 열에 양식 필드가 포함 된 데이터베이스에 저장된 모든 현재 행을 표시하는 그리드 목록이 있습니다. 그런 다음 페이지 상단에 양식이 있습니다. 다른 추가 세부 양식. 값을 입력하고 jQuery json ajax 호출을 통해 데이터베이스에 저장된 "추가"를 누르고, 양식 데이터가 목록 테이블의 새 행에 추가되어 반영됩니다. (이 부분은 작동합니다)

내 문제는 양식 값을 변경하고 싶을 때입니다. 새로 추가 된 jQuery 테이블 행 내에서. 저장 버튼을 누르면 이미 제작 된 테이블 행만 다시 구축됩니다. 동적 행 양식 데이터가 있습니다 ~ 아니다 저장. 업데이트 호출은 jQuery Ajax 및 ASP.NET MVC 모델 바인딩을 사용합니다. "추가"에서 asp.net MVC "부분보기"를 jQuery ajax 응답에 반환하고 있으며 그리드 목록 테이블에 추가되고 있습니다. $("#tablename tr:last").after(result).

내가 이미 추론 한 것은 새로운 동적으로 추가 된 행이 업데이트되지 않는다는 것입니다. 나는있다 IList<Item> 내 MVC 모델 바인딩 목록에서 새로 생성 된 jQuery 동적 에이드 양식 필드 행을 빼고 MVC 모델 바인딩 목록에 반환되었습니다. 이것이 문제이며 페이지 새로 고침을 수행 할 때 행이 다시 원래의 초기 추가에 입력 된 양식 값.

왜 내 아이디어 IList<Item>이 동적으로 추가 된 행을 포함하지 않습니까? Firebug에서 검사하면 이름 속성에 동일한 명명 수녀원을 사용하며 모두 괜찮을 것입니다.

그레이엄.

업데이트 5 월 11:00 GMT+10 : ILIST에서 FormCollection으로 모델 바인딩을 변경할 때 값을받습니다. 모델 바인딩 대신 FormCollection을 사용하고 싶지는 않지만 Formcol을 통해 올바르게 얻을 수 있다면 Ilist 모델 바인더가 아닌 이유는 무엇입니까? 배열 입력을 작업 항목과 비교했으며 모두 동일한 기준과 값에 맞습니다.

도움이 되었습니까?

해결책

나는 ASP 프로그래머가 아니지만 많은 jQuery 작업을합니다. 문제를 올바르게 이해하면 동적으로 생성 된 행이 업데이트 작업을 수행 할 콜백 기능에 묶여 있지 않습니다.

jQuery 'Live'함수 (Wikidkaka가 말하려고했던 것처럼)를 사용하여 동적으로 생성 된 요소를 콜백에 바인딩하거나 AJAX 호출이 반환 될 때 해고되는 콜백 함수에서 새로 생성 된 요소를 수동으로 바인딩 할 수 있습니다.

jQuery의 최신 릴리스에 추가 된 기본 라이브 기능을 사용하는 것이 좋습니다. 콜백을 수동으로 바인딩하기 위해 추가 라인을 작성하지 않아도됩니다. 코드 유지 보수가 더 쉬워집니다.

그래서 변화 :

$('div.your-save-buttons').click(updateFunction);

에게

$('div.your-save-buttons').live(updateFunction);

다른 팁

당신이하려는 일에 플러그인 라이브 쿼리를 사용하십시오. 여기에서 찾을 수 있습니다. http://docs.jquery.com/plugins/livequery

이것은 가장 동적으로 추가 된 요소에서 작동하지 않습니다.

$("select something").onSomeEvent("do something");

그러나 LiveQuery 플러그인을 사용하면 JS 코드를 아래와 같은 것으로 변경하여 작동 할 수 있습니다.

$("select something").livequery('event name','do something');

모델의 속성이 정수 목록 인 경우 사용할 수 있습니다. IEnumerable<int> 자동 모델 바인딩을 얻습니다. 이것은 매개 변수 인 작업 방법에 대해 모두 작동합니다. IEnumerable<int> 그리고 매개 변수가 속성이있는 모델 인 조치 방법 IEnumerable<int>. 예를 들어 : 다음과 같이

<%= Html.Hidden("myField", 1) %>
<%= Html.Hidden("myField", 1) %>

그리고

public ActionResult Update(IEnumerable<int> myField) { }

또는

public ActionResult Update(MyModel myModel) { }
public class MyModel {
    public IEnumerable<int> myField { get; set; }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top