2014-06-24 47 views
0

我是ASP.NET MVC 4的新手。我按照教程加載了部分視圖,而不刷新整個頁面。問題是它只在第一次重新加載。在我Index.cshtml文件:ASP.NET MVC 4部分視圖不會在第二次使用jquery重新加載

<div id="detailsDiv"> 

</div> 
<script type="text/javascript"> 
    $('.setImage').click(function() { 
     var url = "/Home/Test"; 
     var name = $(this).val();   
     $.post(url, { Name: name}, function (data) {    
      $("#detailsDiv").replaceWith(data);   
     }); 
    }) 
</script> 

在我HomeController.cs文件:

[HttpPost] 
    public ActionResult Test(string Name) 
    { 
     ConfigurationData cd = new ConfigurationData(Name, "xyz"); 
     return PartialView("Test", cd); 
    } 

Test.cshtml

@using Wordrific.Models.ParseFolder 
@model ConfigurationData 
<p id="abcde">@Model.ConfigurationVariables</p> 
<p id="abcde">@Model.GameRules</p> 
<p>test</p> 

我的問題是,它只是重新加載一次。我在Test.cshtml文件上設置了斷點。我看到名稱在調試日誌中被更改,但瀏覽器不更新新數據。

+0

使用像Fiddler2(http://www.telerik.com/fiddler)這樣的免費工具來檢查實際發送和返回的內容。它使調試阿賈克斯調用很容易:) –

+0

@TrueBlueAussie我提到的問題,在調試日誌中,配置變量和GameRules的價值都改變了,但瀏覽器顯示舊值,而不是更新之一 –

+0

我對此感到困惑,永遠不應該緩存'post'請求。 'ConfigurationData'構造函數內部發生了什麼? –

回答

0

到目前爲止,我可以看到的唯一一件事情(直到我得到完整的HTML),可能會導致這種情況不使用DOM就緒處理程序。

例如

<script type="text/javascript"> 
    $(function(){ 
     $('.setImage').click(function() { 
      var url = "/Home/Test"; 
      var name = $(this).val();   
      $.post(url, { Name: name}, function (data) {    
       $("#detailsDiv").replaceWith(data);   
      }); 
     }); 
    }) 
</script> 

$(function(){your code here});$(document).ready(function(){your code here});

沒有這個快捷方式,正確的操作將取決於頁面內腳本的位置。如果它在元素的前面加上`class = setImage',那麼代碼在加載元素之前就會觸發。

避免此類問題的另一種方法是使用延遲事件處理程序。

例如

<script type="text/javascript"> 
    $(document).on('click', '.setImage', function() { 
     var url = "/Home/Test"; 
     var name = $(this).val();   
     $.post(url, { Name: name}, function (data) {    
      $("#detailsDiv").replaceWith(data);   
     }); 
    }); 
</script> 

此示例偵聽click事件氣泡到document水平(這將始終存在),然後施加一個jQuery濾波器以匹配元素,然後將該函數應用於任何匹配元素導致事件的

儘管如此,使用DOM就緒處理程序。

+0

問題是'ConfigurationVariables'和'GameRules'被傳遞給局部視圖。我檢查調試日誌,有更新的值,而不是舊的值,但瀏覽器不顯示更新的值 –

0
$("#detailsDiv").replaceWith(data); 

replaceWith正在取代整個detailsDiv這就是爲什麼第二次嘗試失敗,因爲它無法找到detailsDiv了。改用下面的代碼。

$("#detailsDiv").html(data); 
相關問題