2012-09-24 18 views
10

MVC'de basit ajax formum var. AjaxOptions'da bir şey yapan basit javascript işlevine OnComplete ayarlanmış, false döndürür.OnComplete ile Ajax.BeginForm her zaman güncelleştirir sayfa

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { UpdateTargetId = "DivFormId", HttpMethod = "Post", OnComplete = "preventUpdate" })) 

function preventUpdate(xhr) { 
    return false;  
} 

Sorun şu ki, bu sayfa zaten güncelleştirildi. Örneğin. Bir durumda denetleyici, geri gönderildikten sonra kısmi görünüm döndürür, diğer durumda, bazı Json nesnesini döndürür. Kısmi görünüm döndüğünde sayfayı güncellemek ve json döndüğünde iletişim penceresini göstermek istiyorum. Ne yazık ki json döndüğü zaman, MSDN derlediğinde OnComplete işlevi false döndürse bile sayfayı temizler (json ile günceller): Sayfa güncellemesini iptal etmek için JavaScript işlevinden false döndürün.

Alınan yanıtlara bağlı olarak sayfa güncellemesi nasıl önlenir?

Teşekkür ederiz!

----- GÜNCELLEME -------

Şimdiye kadar aşağıdaki çözüm buldum. UpdateTargetId'yi belirtmediğimde, istediğim yanıtla el ile yapabilirim. Fakat yine de yanlış geri dönüşlü davranışlar belgelenmemiştir.

+0

Belki de bu yardımcı olacaktır, ayrıca (Bu durum böyle değil ilk açıklama http://stackoverflow.com/a/1357151/985284 –

+1

bakmak ama emin olmak için, bu iki yöntemi de denedim). Bu OnBegin, OnComplete, ... gibi olaylarla Ajax.BeginForm için MS işleme ... Ve MSDN doc göre OnComplete yanlış döndürerek durdurmak mümkün olmalıdır. –

cevap

22

OnSuccess kullanın ve UpdateTargetId'dan kurtulun.

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { HttpMethod = "Post", OnSuccess = "foo" })) 
{ 
    ... 
} 

ve sonra: Bunun gibi

function foo(result) { 
    if (result.SomePropertyThatExistsInYourJsonObject) { 
     // the server returned a JSON object => show the dialog window here 
    } else { 
     // the server returned a partial view => update the DOM: 
     $('#DivFormId').html(result); 
    } 
} 
+0

'$ ('# DivFormId'). Html (result.responseText);' benim için çalıştı – Filip

+0

Ajax.BeginForm'u kullanmak için aşağıdaki javascript dosyasına ihtiyacınız vardır (MVC 5 şablonunda standart olarak gelmez): jquery. unobtrusive-ajax.js https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/3.2.3 – Baxter

İlgili konular