Saya belajar tentang Peningkatan Progresif dan saya punya pertanyaan tentang pandangan AJAXifying. Dalam proyek MVC 3 saya, saya memiliki halaman tata letak, halaman viewstart, dan dua tampilan biasa.
Halaman viewstart berada di root folder Views dan dengan demikian berlaku untuk semua tampilan. Ini menentukan bahwa semua tampilan harus digunakan _Layout.cshtml
untuk halaman tata letak mereka. Halaman tata letak berisi dua tautan navigasi, satu untuk setiap tampilan. Tautan digunakan @Html.ActionLink()
untuk menampilkan diri ke halaman.
Sekarang saya telah menambahkan jQuery dan ingin membajak tautan ini dan menggunakan Ajax untuk memuat konten mereka di halaman secara dinamis.
<script type="text/javascript">
$(function () {
$('#theLink').click(function () {
$.ajax({
url: $(this).attr('href'),
type: "GET",
success: function (response) {
$('#mainContent').html(response);
}
});
return false;
});
});
</script>
Ada dua cara yang bisa saya pikirkan untuk melakukan ini, tetapi saya tidak terlalu menyukai keduanya:
1) Saya dapat mengambil seluruh konten Tampilan dan menempatkannya dalam tampilan sebagian, kemudian meminta tampilan utama memanggil tampilan sebagian saat itu dibuat. Dengan begitu, menggunakan Request.IsAjaxRequest()
di controller, saya bisa kembali View()
atau kembali PartialView()
berdasarkan apakah permintaannya adalah permintaan Ajax atau tidak. Saya tidak bisa mengembalikan tampilan biasa ke permintaan Ajax karena kemudian akan menggunakan halaman tata letak dan saya akan mendapatkan salinan kedua dari halaman tata letak yang disuntikkan. Namun, saya tidak suka ini karena memaksa saya untuk membuat tampilan kosong hanya dengan @{Html.RenderPartial();}
di dalamnya untuk permintaan GET standar.
public ActionResult Index()
{
if (Request.IsAjaxRequest())
return PartialView("partialView");
else
return View();
}
Kemudian di Index.cshtml lakukan ini:
@{Html.RenderPartial("partialView");}
2) Saya dapat menghapus penunjukan tata letak dari _viewstart dan menentukan secara manual ketika permintaan BUKAN Ajax:
public ActionResult Index()
{
if (Request.IsAjaxRequest())
return View(); // Return view with no master.
else
return View("Index", "_Layout"); // Return view with master.
}
Adakah yang punya saran yang lebih baik? Apakah ada cara untuk mengembalikan tampilan tanpa halaman tata letaknya? Akan lebih mudah untuk secara eksplisit mengatakan "jangan sertakan tata letak Anda" jika itu adalah permintaan ajax, daripada secara eksplisit menyertakan tata letak jika itu bukan ajax.