2012-10-08 114 views
0

我想在ajax上更新部分視圖請求返回。顯然,請求不會從ajax函數返回。 這裏AJAX代碼: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,但你的JavaScript代碼只處理HTML 。你打算做什麼? –

+0

是的,的確...我怎樣才能返回HTML? –

+0

順便說一句,如果它是一個Ajax請求,你不能重定向一個Ajax請求。您需要返回JSON以讓您的Javascript重定向用戶。 –

回答

-1

您不應該RedirectToAction。而不是重定向返回PartialView('Registration');

相關問題:
MVC Return Partial View as JSON
Load PartialView for AJAX and View for non-AJAX request

+0

此代碼在發生錯誤時執行。整個頁面被刷新。 –

+0

Downvoted,因爲它是[僅限鏈接的答案](https://meta.stackexchange.com/a/8259/171858)。此答案不提供*實際答案*。 –

+0

@ErikPhilips 2012年的答案是使用'PartialView'而不是'RedirectToAction'。這個鏈接專用答案如何? –

0

我覺得你的最簡單的解決方案,因爲你只是想要做的部分...

@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" /> 
} 

這是內置到MVC,使得它非常容易更新的能力元素與結果的一個部分。

這就是說你需要一個新的Ajax表單來調用PartnerApplications動作。您希望HttpMethodHttpMethod請求爲POST請求,並且您希望結果替換(InsertionMode.Replacetarget中的現有元素(無論可能如何),並且在請求發生時您希望元素AjaxSearch可見(this是可選的,但我用來表明它正在工作)。

這將爲您生成所需的JavaScript,直到您進入某項內容而不是簡單地返回部分作品EXCELLENT!

編輯:另外,您將需要更新您的行動......

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

需要改變....

return PartialView("PartnerApplicationsPartial", objs);

基於編輯點評:

無法更好地發送數據服務器我不能告訴你要寫什麼來替換該方法。但是,我會查看new AjaxOptions(){}的屬性,因爲它具有一些其他屬性,可以指定JavaScript函數的名稱以調用Ajax請求的四個狀態(before/after/success/fail)。所以如果你需要計算一些東西,你可以通過指定一個在提交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

的我的一個代碼塊: <腳本類型= 「文本/ JavaScript的」> 功能doAjaxPost(本身份識別碼){ .... $。 ajax( { 這裏應該寫些什麼? }); }