2012-03-30 71 views
0

我正在開發一個asp.net mvc應用程序,並在我的頁面上有Ajax調用。下面是我通過Ajax調用加載到頁面的表單:不需要的多個Ajax請求在asp.net中的動作mvc

形式坐落在一個局部視圖

<div id="CreateCultureArea"> 
<% 
     using (Ajax.BeginForm("CreateCulture", "Admin", new AjaxOptions() { OnSuccess = "handleCreateCulture" })) 
     { %> 
..... 

<% } %> 
</div> 

代碼更新

下面的腳本位於一個觀點:

<a href="#" class="CreateCulture" id="">Create Culture</a> 

<script type="text/javascript"> 

     $('.CreateCulture').live('click', function (e) { 
      e.preventDefault(); 
      var idval = this.id; 
      $.ajax({ 
       url: "/Admin/CreateCulture", 
       dataType: 'html', 
       data: { id: idval }, 
       success: function (mydata) { 

        $("#CultureContentArea").empty(); 
        $("#CultureContentArea").empty().hide().append(mydata).fadeIn(2000); 

        $("form").removeData("validator"); 
        $("form").removeData("unobtrusiveValidation"); 
        $.validator.unobtrusive.parse("form"); 

       }, 
       type: "GET" 
      }); 
      return false; 
     }) 
    </script> 

當用戶點擊與CreateCulture類的鏈接時,表單將加載到頁面。但是當我看到螢火蟲中的請求時,它會多次調用這個動作。我讀了類似的帖子,像我在stackoverflow.com上,他們中的大多數人建議在頁面中刪除重複的「jquery.unobtrusive-ajax.min.js」calss,但正如我看到的輸出頁面,我只看到鏈接到「jquery.unobtrusive -ajax.min.js「腳本。

回答

3

問題是@Ajax.BeginForm發出的表單具有屬性data-ajax="true"。在不顯眼的AJAX腳本中(請參閱非縮小版本並查找對asyncRequest的調用)。所以通過自己調用$.ajax,您可以重複@Ajax.BeginForm的工作。只需撥打電話$.ajax,你就會看到你的動作只被調用一次。

如果您需要在AJAX呼叫完成後採取措施,請在Ajax.BeginForm的電話中設置的OnComplete屬性。

+0

抱歉,但我無法理解「只要拿出你調用$阿賈克斯,你會看到你的動作被調用一次」你能告訴更多嗎? – 2012-03-30 17:20:01

+1

在您發佈的示例代碼中,您在'.CreateCulture'的點擊處理程序中調用了'$ .ajax'。它被不顯眼的AJAX調用一次,然後再被您的代碼調用。從您的代碼中刪除對'$ .ajax'的調用。事實上,您可以刪除上面列出的'

0

問題是我在部分視圖中放置了一些腳本,並且每次都通過加載它來複制腳本。所以我把腳本放在頁面上並解決了問題。

0

請確保您有在頁面沒有多的.js refrence

<script src='/Scripts/jquery.unobtrusive-ajax.min.js'></script> 
<script src="/Scripts/jquery.validate.min.js"></script> 
<script src="/Scripts/jquery.validate.unobtrusive.min.js"></script> 
相關問題