çalışmak Güncelleme
DÜZENLEME ilgili her sonucu tarafından döndürülen Content-Type
yararlanmak için bir yoldur. Geri hata bilgileri göndermek için bunu kullanıyoruz ve iletileri görüntülemek için zaten JS var, bu yüzden ya istediğimiz kısmi görünümü alıyoruz ya da hata raporlaması için bilgileri kontrol ediyoruz.
Referans için kısmi görünüm text/html
ve bir JSON yanıtı application/json
döndürmelidir.
Her zamanki gibi, eğlenceli bölüm javascript tarafında ve JQuery ajax()
burada hayal kırıklığı yok!Kumandanızda olarak
, sadece geri dönmek ya
PartialView()
veya
Json(model,)
uygun;
try/catch
biçiminde kullanıyoruz.
JS tarafında, aşağıdaki işlevi kullanıyoruz. Eğer ilk sayfa düzeyinde GET $(document).ready()
ortayı güzel herhangi JQuery olayları yeniden kurmak gerektiğini unutmayın, bu yüzden bir geri arama parametresi var.
function getPartialView(action, controller, model, divId, callback) {
var url = "/" + controller + "/" + action + "/";
$.ajax({
type: "GET",
url: url,
data: model,
success: function (data, textStatus, jqXHR) {
var ct = jqXHR.getResponseHeader("Content-Type");
var mx = ct.match("text\/html");
if (mx != null) {
$(divId).html(data);
if (callback) {
callback($(divId));
}
}
else {
addMessage(data.type, data.title, data.text, data.sticky);
}
},
error: function (jqXHR, textStatus, errorThrown) {
addMessage(3, "\"" + url + "\": Failed", textStatus + ": " + errorThrown, false);
}
});
}
sadece zor biraz tepki olarak Content-Type
başlık kontrol etmek ve buna bağlı olarak hareket etmektedir. HTML olmasaydı JSON'u kabul ederek "aldattığımızı" unutmayın. Önceden var olan addMessage()
işlevimizi arıyoruz, ihtiyacınız olanı yapın!
Ve nihayet, burada onclick
yukarıdaki getPartialView()
hedeflemesi ile örnek bir Çapa unsurdur. formun dışında
<a href="#" onclick="getPartialView('Action', 'Controller', model, '#partialviewdivid', function(dvx) { connectJqueryEvents(dvx); })">Cancel</a>
İşleri Büyük ...
JSON yükü nedeniyle Content-Type
yeterli düzeyde doğrulanmaması HTML olarak yanlışlıkla işlenir Ajax.BeginForm()
yoluyla gönderir. Sonuç, div
'un temelde HTML olarak oluşturulmadığı bir JSON ekleyebilmenizdir. AjaxOptions.OnSuccess
geri araması yürütülür, ancak bu noktada DOM için çok geç!
basit bir çözüm yoktur, ancak yazılı olarak asyncOnSuccess()
fonksiyon basiretsiz olduğu için ne yazık ki jquery-unobtrusive-ajax.js
için küçük onarım gerektirir. OTB versiyonda
function asyncOnSuccess(element, data, contentType) {
var mode;
if (contentType.indexOf("application/x-javascript") !== -1) {
return;
}
if (contentType.indexOf("application/json") !== -1) {
return;
}
...snip...
}
, ikinci
if
deyimi eksik olduğunu; Eklemek, JSON yükünüzü DOM'a çarpmasını önlemek için gerekli olan düzeltmedir. yerine bu düzeltmeyi
JSON yükü sizin
AjaxOptions.OnSuccess
Javascript içine girer ve burada gerektiği gibi devam edebilirsiniz.
Evet Get You Can Hem Umarım sen Json gönderme verildiği için, modelin her türlü geri göndermek, ve sıralama onu Javascript çıkmasına izin verebilir biliyorum
; hasOwnProperty()
orada işe yarar. Açıkçası, daha önce belirtilen RenderViewToString()
aracılığıyla bazı görünüm HTML'lerini geri gönderebilirsiniz.
Gerçekten de, bu bir PartialView yanıtıdır. Ve oldukça hecelemeseniz de, bu çözümdür: AJAX yöntemlerinizi, sayfanın o kısmını ilk başta oluşturmak için kullandığınız aynı kullanıcı denetimini kullanarak oluşturulmuş bir PartialView döndürmesini sağlayın. Bunu, Json (model) dönüşü yerine geri dönen PartialView (model) yazarak yaparsınız. –
Teşekkürler. Bu gerçekten daha iyi bir açıklama :) – Paddy
Craig, şu an yaptığım şey bu. Ben de diğer verilerle birlikte göndermek böylece, Json içinde sarın ardından dönüş PartialView döndü ve çıkan html istiyorum: veya başka koymak - Sorunum Html ve Json hem dönmek istiyorum olmasıdır.gibi bu adam Tür: http://stackoverflow.com/questions/1168791/returning-a-rentered-html-partial-in-a-json-property-in-asp-net-mvc sanırım Yukarıdaki işe yarayacak, ama başkalarının bunu nasıl ele aldığını bilmek isterim. – bgeek