2017-10-12 215 views
0

新手開發人員在這裏,這實際上是我的第一個關於堆棧溢出的問題。我作爲開發人員擔任第一職位,我已經完成了其他人開始的應用程序的任務,並且當用戶單擊某個特定按鈕時,我很難讓頁面刷新。在按鈕上刷新一個頁面

該頁面有一個項目列表,每個項目旁邊都有一個複選框,用戶可以將複選標記插入,然後單擊刪除項目按鈕。理論上,點擊該按鈕應該在頁面完成時刷新頁面,或者至少刷新頁面中包含列表的部分。就我所知而言。該項目正在被刪除,但刷新不起作用,因此用戶在他們選擇刪除的項目實際上從屏幕上消失之前不得不手動刷新頁面。

這裏有什麼按鈕後面的控制器:

[HttpPost] 
     public ActionResult UpdatePartStatus(List<tblPart> parts, tblArea area) 
     { 
      _LookupService.UpdatePartStatus(parts); 
      // return RedirectToAction("Details", area); 
      // return Redirect("~/Details"); 
      return RedirectToAction("Parts", "Menu", false); 
      // <% return Response.Redirect(Request.RawUrl); %> 
      // return Response.Redirect(Request.RawUrl); 
      // return Page.Redirect(Page.Request.RawUrl, false); 
      // return Redirect(Request.UrlReferrer.ToString()); 
      // return View(); 
      // return Redirect(HttpContext.Request.UrlReferrer.AbsoluteUri); 

     } 

是註釋掉了第一行是以前開發商離開它的方式。所有其他被註釋掉的行都是我到目前爲止所嘗試過的東西,其中沒有一個可行。沒有註釋掉的那個恰好是我發佈之前我嘗試的最後一個。大多數這些嘗試是尋找在這裏對堆棧溢出

的結果,這裏的腳本詳細信息視圖:

<script> 
    $('#btnAjax').click(function() { 

      ....validation code I removed for this post.... 

      $.ajax({ 
       type: 'post', 
       url: '/Parts/UpdatePartStatus', 
       contentType: 'application/json; charset=utf-8', 
       data: JSON.stringify(data), 
       dataType: 'json' 
      }) 
     } 
    }); 
</script> 

而這裏的,我已經在其他幾個職位見過引用上圖路線碼這個話題:

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Parts", action = "Menu", id = UrlParameter.Optional } 

的最後一件事,他們離開前是,這是所有標準的MVC,沒有什麼不尋常的,但我跑出來的想法以前的開發商說。

我很欣賞任何人可以提供的想法或建議。

感謝

+0

你試過了window.reload();聽衆裏面? – Jason

回答

1

只是一個success功能添加到Ajax請求:

$.ajax({ 
    type: 'post', 
    url: '/Parts/UpdatePartStatus', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(data), 
    dataType: 'json', 
    success: function() { 
     location.reload(); 
    } 
}) 
+0

我試過了,它似乎並沒有改變行爲,我是否也需要一個'錯誤:'與'成功一起:'還是不在乎?我也嘗試了@Jason的建議,只是按照@nbokmans的方式輸入了它,但是我放了window.reload()而不是location.reload(),這似乎也沒有改變行爲。我很欣賞這些回覆,但它仍然不起作用 – Jay

0

你有問題共享的代碼沒有任何關係重新加載當前頁面。看起來你正在做一個Ajax表單提交給服務器。所以從中返回一個重定向響應沒有任何意義。

如果要重新加載頁面,可以在ajax調用的done事件中執行此操作。

$.ajax({ 
    type: 'post', 
    url: '/Parts/UpdatePartStatus', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(data) 
}).done(function(res){ 
    window.location.href = window.location.href; // This will reload the page 
}).fail(function(a, b, c) { 
    console.log('ajax call failed'); 
    }); 

但同樣,如果你重新加載頁面是什麼做的AJAX後的點?您可以簡單地刪除使用JavaScript刪除的特定DOM元素,而不是對頁面進行實時編碼。這將爲用戶提供部分頁面更新體驗,而無需重新加載整個頁面。

如果你知道你刪除的項目的ID,你可以在你的jQuery選擇器中使用它刪除它。

var idOfDeletedItem = "someDomElementId"; 
$.ajax({ 
    type: 'post', 
    url: '/Parts/UpdatePartStatus', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(data) 
}).done(function(res){ 
    // Let's remove that DOM element from the DOM 
    $("#"+idOfDeletedItem).remove(); 

}).fail(function(a, b, c) { 
    console.log('ajax call failed'); 
}); 
+0

感謝@Shyju的回覆,我首先嚐試了第二個建議,因爲這似乎是實現它的首選方式,而且我認爲,以前的開發人員意圖是什麼。但我不知道我是否正確地做了這一行,或者有太多報價或者在某處丟失了一個報價: '$(「#」+ idOfDeletedItem「)。remove();' 我嘗試了一些變化既沒有,但我沒有任何運氣尚未你是正確的,雖然有略高於Ajax調用聲明的變量: 'VAR數據= {「零部件」:itemsToRemove,「區域」 :。面積};' 你能幫助澄清究竟如何必須 – Jay

+0

是它應該是'$( 「#」 + idOfDeletedItem)一個.remove();'我有一個額外的' 「'」 在那裏。我現在更新了答案,現在修復它。如果您知道DOM元素的Id,則可以使用此方法。 – Shyju

0

如果您在使用Ajax,那麼你應該使用

public JsonResult UpdatePartStatus(List<tblPart> parts, tblArea area) 
    { 
     _LookupService.UpdatePartStatus(parts); 

     return Json(null); //This will always return a null result to your ajax call indicating a success 
    } 

對於我來說,我通常做返回JSON結果是這樣的:

try { 
    LookupService.UpdatePartStatus(parts); 
    return Json(new { Success = true}); 
} 
catch { 
    return Json(new { Success = false}); 
} 

而在你的Ajax調用,做這個:

$.ajax({ 
type: 'post', 
url: '/Parts/UpdatePartStatus', 
contentType: 'application/json; charset=utf-8', 
data: JSON.stringify(data), 
dataType: 'json', 
success: function(result) { 
    if (result.Success) 
     location.reload(); 
    } else { 
     alert("Delete failed"); 
    } 

} 
})