2012-10-08 5 views
0

아약스 업데이트 된 부분보기에서 요청을 반환하려고합니다. 분명히 요청은 ajax 함수에서 반환되지 않습니다. 다음 아약스 - 코드 :부분보기를 반환하는 아약스 요청

<script type="text/javascript"> 
function doAjaxPost(myid) { 
    // get the form values 
    var ApplSort = $('#DropDownListSort').val(); 
    var radio_check_val=0; 

    for (i = 0; i < document.getElementsByName('radio').length; i++) { 
     if (document.getElementsByName('radio')[i].checked) { 
      radio_check_val = document.getElementsByName('radio')[i].value; 
     } 
    } 

    // alert("myid=" + myid +";"+ "ApplSort=" + ApplSort + ";" + "radio_check_val=" + radio_check_val); 

    $.ajax(
{ 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    data: { ApplSort: ApplSort, radio_check_val: radio_check_val, myid: myid }, 
    UpdateTargetId: "tabledata", 
    dataType: 'html', 
    url: 'Partner/PartnerApplications', 
    success: function (data) { 
     var result = data; 
     $('tabledata').html(result); 
}, 

    error: function (error) { 
     alert('Ошибка AJAX-запроса. Обновите страницу!'); 
    } 
}); 
} 
</script> 

실패가 호출되고 페이지가 완전히 업데이트됩니다. 여기

뷰의 내용을 업데이트됩니다 :

<div id="target"> 
@Html.Partial("~/Views/Partner/PartnerApplicationsPartial.cshtml") 
</div> 

컨트롤러의 코드 :

[HttpPost] 
    public ActionResult PartnerApplications(int[] ApplSort, int[] radio_check_val, int[] myid) 
    { 
     MordaPartner MrdPrt = new MordaPartner(Server, Request); 

     if (Request.IsAjaxRequest()) 
     { 
      var obj = MrdPrt.morda_obj.CookieAuthenticationPartner(Server, Request, Response, MrdPrt.PartnerLogin, MrdPrt.PartnerPassword); 
      if (obj != null) 
      { 
       //alert("ApplSort=" + ApplSort + ";" + "ApplSelectOffer=" + ApplSelectOffer + ";" + "ApplSelectAuction=" + ApplSelectAuction + ";" + "ApplSelectNoOffer=" + ApplSelectNoOffer); 

       var objs = from s in MrdPrt.morda_obj.entities.applications where s.application_user_city == obj.partner_city & s.application_blocked != 1 orderby s.application_id ascending select s; 

       return Json(new { data = this.RenderPartialViewToString("PartnerApplicationsPartial", objs) }); 
      } 
      else 
      { 
       return RedirectToAction("Registration"); 

      } 
     } 
     else { return RedirectToAction("PartnerApplications"); } 
    } 

이가 여기에서 찍은 RenderPartialViewToString : http://www.c-sharpcorner.com/blogs/7150/implementing-renderpartialviewtostring-in-asp-net-mvc-3.aspx

스크립트가로드됩니다

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 

내가 뭘 잘못 했니?

+0

질문 : 같은 기능 PartnerApplications에 당신은 JSON을 반환하거나 HTML하지만 자바 스크립트 코드는 HTML 만 처리 . 그것이 당신이하려는 의도입니까? –

+0

예, 정말로 ... 그리고 HTML 만 반환 할 수 있습니까? –

+0

BTW, Ajax 요청 인 경우 아약스 요청을 리디렉션 할 수 없습니다. Javascript가 사용자를 리디렉션하도록하려면 JSON을 반환해야합니다. –

답변

-1

너는 RedirectToAction이 아니어야합니다. 리디렉션 대신 PartialView('Registration');을 반환하십시오.

관련 질문 :
MVC Return Partial View as JSON Load PartialView for AJAX and View for non-AJAX request

+0

이 코드는 오류가 발생하면 실행됩니다. 전체 페이지가 새로 고쳐집니다. –

+0

다운 링크는 [링크 전용 답변] (https://meta.stackexchange.com/a/8259/171858)입니다. 이 대답은 실제 응답 *을 제공하지 않습니다. –

+0

@ErikPhilips 2012 년의 답은'RedirectToAction' 대신'PartialView'를 사용하는 것입니다. 그 링크 전용 답변은 어떤가요? –

0


나는이 그것을 아주을 쉽게 업데이트 할 수 있습니다 MVC에 내장 된 기능입니다

@using(Ajax.BeginForm("PartnerApplications", 
         null, 
         new AjaxOptions() { 
          HttpMethod = "POST", 
          InsertionMode = InsertionMode.Replace, 
          UpdateTargetId = "target", 
          LoadingElementId = "AjaxSearch" }, 
         new { id = "UserSearchForm" })) { 
    <input type="text" id="id" name="id" placeholder="Enter Search" /> 
} 

당신은 단지 부분을하고자하기 때문에 당신의 가장 쉬운 해결책을 생각 ... 요소를 부분의 결과와 함께 사용합니다.

이 말은 모두 PartnerApplications 액션을 호출하는 새로운 Ajax 양식을 원한다는 것입니다. HttpMethod과 함께 호출 된 작업이 POST 요청인데 결과가 (기존 일 수도 있음)의 기존 요소를 (InsertionMode.Replace)로 대체하고 요청이 진행되는 동안 요소 AjaxSearch이 표시되기를 원할 경우 선택적이지만 작동하는지 보여주기 위해 사용하는 것).

이렇게하면 필요한 JavaScript가 생성되며, 단순히 부분을 반환하는 것 이상으로 들어가기 전까지는 훌륭하게 작동합니다!

편집 : 또한 당신은

return Json(new { data = this.RenderPartialViewToString("PartnerApplicationsPartial", objs) });

필요가 .... 의견을 기반

return PartialView("PartnerApplicationsPartial", objs);

EDIT 변경 ... 액션을 업데이트해야합니다 :

더 나은 데이터를 알지 못하면 전송됩니다. 서버 내가 그 방법을 대체하기 위해 무엇을 써야하는지 말할 수 없습니다. 그러나 new AjaxOptions(){}의 속성을 살펴 보겠습니다. Ajax 요청의 네 가지 상태 (before/after/success/fail)를 호출하는 JavaScript 함수의 이름을 지정할 수있는 몇 가지 추가 속성이 있기 때문입니다.따라서 뭔가를 계산할 필요가 있다면 Ajax 요청이 제출되기 전에 처리 될 JavaScript 함수를 지정하여이를 수행 할 수 있습니다.

또한 (특히 jQuery를 사용하고 있기 때문에) 선택한 라디오 버튼 값을 얻는 데 필요한 많은 작업을 수행하고 있습니다.

당신은 대체 할 수 ... 유사 뭔가

var radio_check_val=0; 

for (i = 0; i < document.getElementsByName('radio').length; i++) { 
    if (document.getElementsByName('radio')[i].checked) { 
     radio_check_val = document.getElementsByName('radio')[i].value; 
    } 
} 

....

var radio_check_val = $('radio').filter(':checked').val(); 
//this will only work if there is only one set of radio buttons on the page. 
//Otherwise you will need to add a name to the selector. 
+0

이 경우 Ajax 함수가 있어야합니까? –

+0

나는 당신이 정교 할 수있는 질문을 이해하지 못합니까? 내 코드의 – Jared

+0

첫 번째 블록 : <스크립트 유형 = "텍스트/자바 스크립트"> 기능 doAjaxPost (대한 myid) { .... $. 아약스 ( { 여기에 무엇을 써야합니까? }); }