2013-05-24 3 views
0

아약스와 업데이트를 사용하여 양식을 처음 게시 할 때 문제가 발생하지만 두 번째는 전체 게시물을 다시 대체하고 대체합니다. 내 부분보기 페이지. 나는 내가 UnobtrusiveJavaScriptEnabled = true을 가지고 있고, liveon으로 바꿨다는 것을 눈치 채지 못했지만 ... 같은 문제가 있습니다.PartialView의 MVC AJAX 폼이 아약스에 처음 게시되면 두 번째 시간은 전체 게시물이됩니다.

업데이트 : ModelState가 유효하지 않은 경우에만 발생합니다.

이것은 내가 그것을 해결하지 않은 여전히 ​​답을 찾는 오지만 한 닫힙니다 :이 비추 수 Ajax.BeginForm doesn't work properly

모든 빛을 이해할 수있을 것이다.

이 내 메인 뷰 (테스터)이다

@{ 
ViewBag.Title = "testView"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
<h2> 
    My TestView</h2> 
    @{Html.RenderPartial("_Form", new Project.Models.TestModel());} 
<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

이 내 부분 뷰 형태 (_form)이다

public ActionResult Tester() 
{ 
    return View(); 
} 

[HttpPost] 
public PartialViewResult TesterProjUpdate(TestModel model) 
{ 

    if (!ModelState.IsValid) 
     return PartialView("_Form", model); 

    TestProj.Vehicle vehicle = new TestProj.Vehicle(); 

    if (Request.IsAjaxRequest()) 
    { 
     return PartialView("_Vehicle", vehicle); 
    } 

    return PartialView("_Form", model); 

} 

및이 내 컨트롤러

@model Project.Models.TestModel 
<div class="updatable"> 
<form method="post" action="@Url.Action("TestProjUpdate")" data-site-ajax="true" data-site-target=".updatable"> 
<fieldset> 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.TextField) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.TextField) 
     @Html.ValidationMessageFor(model => model.TextField) 
    </div> 

    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 
</form> 
</div> 

드디어 내 jQuery 아약스 전화 :

$(function() { 

var ajaxFormSubmit = function() { 
    var $form = $(this); 

    var options = { 
     url: $form.attr("action"), 
     type: $form.attr("method"), 
     data: $form.serialize(), 
    }; 

    $.ajax(options).done(function (data) { 
     var $target = $($form.attr("data-site-target")); 
     $target.replaceWith(data); 
    }); 

    return false; 
}; 

$("form[data-site-ajax='true']").submit(ajaxFormSubmit); 

});

나를 도와 줄 수있는 도움이 정말 좋을 것입니다!

답변

1

변경해보십시오 당신의

$("form[data-site-ajax='true']").submit(ajaxFormSubmit); 

당신의 $ target.replaceWith (데이터) 후 다음
$("form[data-site-ajax='true']").one('submit', ajaxFormSubmit); 

; 추가

$("form[data-site-ajax='true']").one('submit', ajaxFormSubmit); 
+1

그 덕분에 완벽한 감사 케빈! – dhtor