MVC 응용 프로그램에 Ajax 기능을 추가하려고합니다. 양식을 비동기 적으로 다시 게시하고 싶습니다.MVC 2.0 Ajax : 드롭 다운 목록의 자동 제출이 일반적인 포스트 백이 발생합니다.
using (Ajax.BeginForm("SetInterviewee", "Date", routeValues, new AjaxOptions { UpdateTargetId = "divInterviewee" }))
나는 드롭 다운 목록은 값이 변경을 선택하면 자동으로 다시 게시 할 : 다음은 폼 코드는 그러나
<%= Html.DropDownList("interviewees", Model.interviewees.intervieweeLists.intervieweesList, "-- select employee --", new { @class = "ddltext", style = "width: 200px", onchange = "this.form.submit();" })%>
을, 나는, 프로그램 다시 게시 일반적으로, 지금 연결 안 함을하려고 할 때 내가 예상했던 부분적인 포스트 백. 여기에 문제가 있다고 생각합니다 : onchange = "this.form.submit();" 드롭 다운 목록에서
어떻게 든 비동기 포스트 백 대신 정상적인 포스트 백이 발생한다고 생각합니다.
여기 MVC 폼 태그에 HTML에 대해 생성하는 작업은 다음과 같습니다
<form action="/SetInterviewee/2011-1-26/2011-1/visit" method="post" onclick="Sys.Mvc.AsyncForm.handleClick(this, new Sys.UI.DomEvent(event));" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: 'divInterviewee' });">
내가 함께 "this.form.submit는()"를 "onsubmit"이벤트 핸들러가 호출되지 않는 것이라고 생각합니다. 것은, 나는 왜 이해하지 않는다이다. 양식을 제출하는 모든 이벤트를 "onsubmit"하지 않습니까?
업데이트 : 내가 thusly 히, JQuery와에 갔다 :
$(function() {
$('#interviewees').change(function() {
var form = $('#intervieweeForm');
$.ajax({
url: form.attr('action'),
type: form.attr('method'),
data: form.serialize(),
success: function (result) {
$('#selectedInterviewee').val(result);
}
});
});
});
이 그들 가운데, 많은 문제를 일으키는 :
- 여전히 asyncrhonous 포스트 백을 수행하지 않는 것 같습니다. 내 컨트롤러 작업 메서드에서 다음 코드가 있습니다 : "if (Request.IsAjaxRequest())"false를 반환합니다.
- 더 이상 모델 바인딩을 수행 할 수 없습니다. 같은 내 경로가 같습니다
http://localhost:1986/Interviews/2011-2-25/2011-2/visit
하지만 분명히 끝나는 경로가 전송되는이 작동하지 바인딩 모델의 원인
http://localhost:1986/SetInterviewee/2011-2-25/2011-2?
Count=5&Keys=System.Collections.Generic.Dictionary`2+KeyCollection
[System.String,System.Object]
&Values=System.Collections.Generic.Dictionary`2+ValueCollection
[System.String,System.Object]
입니다 - "방문을"A "모드 있어야하는데 "매개 변수가 있지만 거기에 없기 때문에"모드 "는 기본적으로"전화 "로 설정되어 전체 사과 카트를 뒤집습니다.
이 문제를 일으키는 것은 serialize 명령입니까? POST가 메서드 일 때 쿼리 문자열에 추가 할 이유가 무엇인지 이해할 수 없습니다.
그 중에서도 내 작업이 ViewResult를 반환해야한다는 사실 때문에, 아약스를 사용하여 필요한 모든 문자열을 반환 할 수는 있지만 ... 나는 라우팅/바인딩 일을 바로 잡아!
업데이트 : "SetInterviewee"는 실제로 올바른 경로이지만, routeValues 매개 변수는 현재보기에서 경로 값을 복사해야합니다. 다음 폼의 코드는 다음과 같습니다
RouteValueDictionary routeValues = ViewContext.RouteData.Values;
using (Html.BeginForm("SetInterviewee", "Date", routeValues, FormMethod.Post, new { id = "intervieweeForm" }))
감사합니다. Darin. 추가 정보는 jquery가 갈 길이라는 것을 나에게 확신시켰다. 불행히도, 나는이 시점에서 jquery를 너무 잘 모른다. 그러나 나는 당신의 해결책을 시험해보고 무슨 일이 일어날지를 볼 것입니다. 코드를 제공해 주셔서 감사합니다. – Cynthia
현재 가지고있는 문제로 내 질문을 업데이트했습니다. – Cynthia