ASP.Net MVC에서 AJAX 양식 제출 결과를 어떻게 발송합니까?
-
06-09-2019 - |
문제
ASP.Net MVC에서는 다음과 같은 형식을 갖습니다.
<% using (Ajax.BeginForm(new AjaxOptions() { OnSuccess="onSuccess"})) {%>
<p>
<label for="Comment">Comment:</label>
<%= Html.TextArea("Comment")%>
<%= Html.ValidationMessage("Comment", "*")%>
</p>
<p><input type="submit" value="Submit comment" /></p>
<% } %>
onSuccess Javascript 함수는 결과가 검증되지 않았기 때문에 양식의 다른 버전인지, 댓글 목록에 추가할 div로서의 댓글인지, 로그인을 위해 팝업되어야 하는 로그인 페이지인지 어떻게 알 수 있습니까?
올바른 솔루션이 없습니다
다른 팁
귀환 JSON 또는 사용하는 전송 방법에서이를 정의 할 수 있습니까?
그것이 당신이 찾고있는 것인지 확실하지 않고, 또한 다음과 같은 기능을하는 방법입니다.
YourFunction(ajaxContext);
AjaxContext는 다음과 같이 정의됩니다.
AjaxContext ajaxContext = new AjaxContext(request, updateElement, loadingElement, ajaxOptions.InsertionMode);
Ajax 양식 내부의 코드를 새로운 부분보기로 바꾸면 컨트롤러에서 해당 부분을 반환합니다. 부분보기는 다음과 같이 구성됩니다.
<p>
<label for="Comment">Comment:</label>
<%= Html.TextArea("Comment")%>
<%= Html.ValidationMessage("Comment", "*")%>
</p>
<p><input type="submit" value="Submit comment" /></p>
이런 식으로, 당신의 부분보기는 정기적 인 시야처럼 작동합니다. 불행히도 JavaScript를 응답으로 실행하는 간단한 방법은 없습니다 (보기로 응답하기 때문에). 응답이 JSON 문자열 인 경우 더 쉬울 것이지만,이 경우 JSON 문자열이 양식을 제출하고 응답을 처리 한 결과 화면에서 렌더링되므로 AjaxForm을 사용할 수 없습니다. 이것은 효과가있을 수 있습니다 (시도하지 않았습니다) :
<p>
<label for="Comment">Comment:</label>
<%= Html.TextArea("Comment")%>
<%= Html.ValidationMessage("Comment", "*")%>
</p>
<p><input type="submit" value="Submit comment" /></p>
<script type="text/javascript">
function processResponse(data){
// blah blah blah
}
processResponse(<%= ViewData["dataFromTheController"] %>);
</script>
응답의 루트 요소 (예 : .form, .comments, .login)에 다른 CSS 클래스를 추가 할 수 있습니다. 그런 다음 (예 : jQuery) :
var response = $(responseContent);
$('.form', response).each(function() {
// $(this) is form
});
$('.comments', response).each(function() {
// $(this) is comments
});
$('.login', response).each(function() {
// $(this) is login page
});
onsuccess javaScript 함수는 결과가 검증되지 않았기 때문에 결과가 다른 버전의 양식인지, 주석 목록에 추가하는 DIV 또는 로그인을 위해 팝업 해야하는 로그인 페이지를 추가 할 수있는 주석을 어떻게 알 수 있습니까?
간단히 대답하자면 명시적으로 유효성을 검사하지 않는 한 불가능하다는 것입니다.이는 JSON이 문자열로 전송되고 클라이언트 측 Javascript가 문자열을 가져오기 때문입니다.
우선, 어떤 종류의 객체가 예상되는지 암묵적으로 알아야 합니다.웹 서비스를 호출하는 경우 @ Cars/List
그런 다음 반환된 개체가 자동차 목록이라는 것을 알고 클라이언트에서 이를 적절하게 구문 분석합니다.요청을 재시도하거나 기록하거나 오류 메시지를 표시하여 적절하게 처리해야 하는 오류가 발생할 수 있습니다.
나는 당신이 사용하는 것이 좋습니다 jQuery.form 플러그인, 이것으로 당신은 다음과 같이 ajax처럼 행동하는 정상적인 형태를 가질 수 있습니다.
<script type="text/javascript">
// wait for the DOM to be loaded
$(document).ready(function() {
// bind 'myForm' and provide a simple callback function
$('#myForm').ajaxForm(function() {
alert("Thank you for your comment!");
});
});
</script>
<form id="myForm" action="comment.php" method="post">
Name: <input type="text" name="name" />
Comment: <textarea name="comment"></textarea>
<input type="submit" value="Submit Comment" />
</form>