2012-05-30 90 views
6

我有一個MVC3應用程序,我需要添加ajax加載圖像。我把這個我的看法Ajax.BeginForm中的LoadingElementId不顯示加載圖像

@using (Ajax.BeginForm(
     "LogOn","Account", 
     new AjaxOptions { LoadingElementId = "div_loading" })) 

這是我在同樣的觀點很簡單的div:

<div id="div_loading" style="display:none;"> 
    <img src="@Url.Content("~/Content/Images/loading.gif")" alt="" /> 
</div> 

當我點擊我的提交按鈕後的形式回來了,從來沒有出現loading.gif。我的代碼運行良好,但沒有加載指示燈顯示。圖像被正確命名並在正確的位置。有誰知道爲什麼?

更新 顯然,這與Telerik應用程序有關。如果我創建一個常規的MVC3應用程序,它的工作原理。當我創建一個Telerik MVC3應用程序時,它不起作用。 Telerik有沒有其他人遇到過這種情況?

+0

你試過用螢火蟲調試過嗎?你的控制檯有任何錯誤嗎? –

回答

6

我寧願迴避附加一個加載圖像到我所做的每個ajax調用。

這裏頂端回答是顯示一個Ajax微調(加載圖片)每當AJAX使得發送調用的解決方案:

Display spinner while waiting For ajax

它擁有你所需要的功能。只需使用javascript將圖像的顯示附加到ajax調用。

它應該是這樣的:

<script type="text/javascript"> 
     $(document).ready(function() { 
      BindSpinner(); 
     }); 

     function BindSpinner() { 
      $("#div_loading").bind("ajaxSend", function() { 
       $(this).show(); 
      }).bind("ajaxStop", function() { 
       $(this).hide(); 
      }).bind("ajaxError", function() { 
       $(this).hide(); 
      }); 
     }; 
    </script> 

這樣做是顯示在阿賈克斯發送div和隱藏它在阿賈克斯停止或錯誤網頁上的所有電話。如果您將此腳本和div放入您的_layout中,它將爲您網站上的每個Ajax調用執行此操作。

+0

感謝您的回覆。我將它添加到我的_Layout.cshtml中,但我仍然沒有看到加載器。 ajax發送一個我需要創建的方法嗎? – BoundForGlory

+0

似乎很明顯,但圖像是加載到您的項目?嘗試設置備用文本的東西,以確保div顯示。哦,並確保你的div也在_layout中。 – Totero

+0

是的,它在那裏。如果我刪除style =「display:none」並刷新,gif顯示出來。相信我,我先看看那個。 – BoundForGlory

1

你可能想試試這個。我把它從SO質疑here

<div id="div_loading" style="visibility:hidden;"> 
    <img src="@Url.Content("~/Content/Images/loading.gif")" alt="" /> 
</div> 
+0

我試過用我的手指交叉,它沒有工作:(我安裝了一個示例項目,它的工作原理,我把它移動到我的主項目,它並沒有,但是這似乎很簡單,我隱藏並顯示對象之前 – BoundForGlory

+0

任何機會你的加載gif沒有被複制到你的輸出目錄?「生成操作」是否設置爲「內容」並將「複製到輸出」設置爲「始終複製」或「複製是否更新? –

+0

沒關係,只是讀了Totero的回答 –

14

你可以從你試試這個還有:here

function AjaxBegin() 
{ 
    $('#div_loading').show(); 

} 
function AjaxComplete() 
{ 
    $("#div_loading").hide(); 
} 
function AjaxFailure(ajaxContext) 
{ 
    var response = ajaxContext.responseText; 
    alert("Error Code [" + ajaxContext.ErrorCode + "] " + response); 
} 


AjaxOptions: 

OnFailure = "AjaxFailure"; 
OnBegin = "AjaxBegin"; 
OnComplete = "AjaxComplete"; 
+0

我認爲OnBegin可能是要走的路,但它不會調用我的方法AjaxBegin。我這樣做就像新的AjaxOptions {OnBegin =「return AjaxBegin()」}) – BoundForGlory

+0

AjaxOptions事件可以使用JavaScript字符串或JavaScript函數名稱,只要您的AjaxBegin函數位於全局名稱空間上就可以工作。它是否工作,如果你去:新的AjaxOptions {OnBegin =「AjaxBegin」} –

+0

@ user1202717嘿,只是想跟進,看看這是否適合你? –

0

我有同樣的問題,並能解決它改變了元素的名稱是隱藏/顯示。我使用駝峯格式:「myDivToBeHidden」

元素需要將「顯示」屬性設置爲「無」。