문제

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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top