Ben yaklaşık öğreniyorum Aşamalı Enhancement ve ben AJAXifying görünümler hakkında bir sorum var. MVC 3 projemde bir düzen sayfası, bir görünüm başlatma sayfası ve iki düz görünüm var.
Viewstart sayfası Views klasörünün kökündedir ve bu nedenle tüm görünümler için geçerlidir. Tüm görünümlerin _Layout.cshtml
mizanpaj sayfaları için kullanılması gerektiğini belirtir . Düzen sayfası, her görünüm için bir tane olmak üzere iki gezinme bağlantısı içerir. Bağlantılar @Html.ActionLink()
kendilerini sayfaya dönüştürmek için kullanır .
Şimdi jQuery ekledim ve bu bağlantıları kaçırmak ve dinamik olarak sayfadaki içeriğini yüklemek için Ajax kullanmak istiyorum.
<script type="text/javascript">
$(function () {
$('#theLink').click(function () {
$.ajax({
url: $(this).attr('href'),
type: "GET",
success: function (response) {
$('#mainContent').html(response);
}
});
return false;
});
});
</script>
Bunu yapmanın iki yolu var, ama ikisini de sevmiyorum:
1) Tüm Görünüm'ün içeriğini alıp kısmi bir görünüme yerleştirebilirim, daha sonra ana görünüm oluşturulduğunda kısmi görünümü çağırabilirim. Bu şekilde, Request.IsAjaxRequest()
denetleyicide kullanarak , isteğin bir Ajax isteği olup olmamasına bağlı olarak View()
geri dönebilir veya geri dönebilirim PartialView()
. Ajax isteğine normal görünümü geri veremem çünkü düzen sayfasını kullanır ve düzen sayfasının ikinci bir kopyasını alırım. Ancak, bunu sevmiyorum çünkü beni @{Html.RenderPartial();}
standart GET istekleri için bunlarla bir boş görünüm oluşturmaya zorluyor .
public ActionResult Index()
{
if (Request.IsAjaxRequest())
return PartialView("partialView");
else
return View();
}
Sonra Index.cshtml dosyasında şunları yapın:
@{Html.RenderPartial("partialView");}
2) Düzen atamasını _viewstart öğesinden kaldırabilir ve istek Ajax DEĞİL olduğunda manuel olarak belirtebilirim:
public ActionResult Index()
{
if (Request.IsAjaxRequest())
return View(); // Return view with no master.
else
return View("Index", "_Layout"); // Return view with master.
}
Daha iyi bir öneri olan var mı? Düzen sayfası olmadan bir görünüm döndürmenin bir yolu var mı? Eğer bir ajax isteği ise açıkça "mizanpajınızı dahil etmeyin" demek çok daha kolay olurdu, mesela ajax değilse mizanpajı dahil etmek daha kolay olacaktır.