2011-04-28 3 views
2

ASP.NET MVC3을 사용하여 폼의 데이터를 컨트롤러의 함수에 게시하는 데 Jquery/Ajax를 사용하고 있습니다. 내가 겪고있는 문제는이 코드를 인덱스 뷰에 넣을 때 제대로 작동하지만 같은 코드를 CreatePost 뷰에 넣을 때 작동하지 않는다는 것입니다. 나는 경고를 기반으로 컨트롤러의 기능에 중단 점을 설정하여 작동 여부를 알 수 있습니다.ASP.NET MVC3 Jquery/Ajax 문제

내 컨트롤러 BlogController라고하며이 함수가 모습입니다 :

[AcceptVerbs(HttpVerbs.Post)] 
    public JsonResult CreateEntry(string title, string body) 
    { 
     return Json(false); 
    } 

내보기의 코드는 다음과 같습니다 (지금의 더미 기능) :

<script type="text/javascript"> 
$(function() { 
    $(".error").hide(); 

}); 

function SubmitEntryPostForm() { 
    var blogEntry = { 
     'title': $('#EntryTitle').val(), 
     'body': $('#EntryBody').val() 
    }; 
    $.ajax({ 
     type: "POST", 
     url: "blog/CreateEntry", 
     data: blogEntry, 
     success: function() { 
      alert("it worked"); 
     } 

    }); 
    return false; 
} 

function ValidateCreateEntry() { 
    $(".error").hide(); 
    var title = $("#EntryTitle").val(); 
    if (title == "") { 
     $("#title_error").show(); 
     $("#EntryTitle").focus(); 
     return false; 
    } 
    var body = $("#EntryBody").val(); 
    if (body == "") { 
     $("#body_error").show(); 
     $("#BodyTitle").focus(); 
     return false; 
    } 
    return SubmitEntryPostForm(); 
} 

<div id="CreateEntry"> 
<form action=""> 
    <fieldset> 
     <label for="title" id="title_label">Title</label> 
     <input type="text" name="title" id="EntryTitle" size="30" /> 
     <label class="error" for="title" id="title_error">This field is required.</label> 
     <br /> 
     <label for="body" id="body_label">Content</label> 
     <input type="text" name="body" id="EntryBody" size="30" /> 
     <label class="error" for="boby" id="body_error">This field is required.</label> 
     <br /> 
     <input type="submit" name="submit" class="button" id="CreateEntryButton" value="Send" onclick="return ValidateCreateEntry();" /> 
    </fieldset> 
</form> 

+0

'CreatePost'는 어떻게 생겼습니까? –

+2

콘솔에 오류가 있습니까? 응답은 무엇입니까? –

+0

색인과 작성 우편은 둘 다 자바 스크립트와 동일한 양식을 포함한다는 점에서 동일합니다. – MaxGeek

답변

3

BlogController 권한에 Action 및 Index와 CreateEntry가 있고 아마도 기본 컨트롤러입니까? 당신이 CreatePost 조치를 호출 할 때 경우에 따라서, 브라우저에서 URL이

로컬 호스트/블로그처럼/CreatePost

하고 색인 작업을 호출 할 때, 브라우저에서 URL을

같다

로컬 호스트/블로그/

(사용자가 명시 적으로 작성/색인을 작성하지 않으므로). 에 따라서, 첫 번째 경우에, 상대 아약스 URL 자바 스크립트 코드

URL : "블로그/CreateEntry"

로컬 호스트/블로그/블로그/CreateEntry/

에 게시됩니다

두 번째 전화를하는 동안

로컬 호스트/블로그/CreateEntry/

하고 작동하는 이유 이잖아. 따라서 Url.Content, VirtualPathUtility.ToAbsolute 등과 같은 일부 기능의 도움을 받아 AJAX 호출에서 절대 URL을 사용해야합니다. 엄지 손가락 규칙 : 절대적으로 필요한 경우가 아니면 절대 상대 URL을 사용하지 마십시오..