मैं प्रोग्रेसिव एनहांसमेंट के बारे में सीख रहा हूं और मेरे पास AJAXifying विचारों के बारे में एक सवाल है। मेरे MVC 3 प्रोजेक्ट में मेरा एक लेआउट पृष्ठ, एक व्यूस्टार्ट पृष्ठ और दो सादे दृश्य हैं।
व्यूस्टार्ट पृष्ठ दृश्य फ़ोल्डर की जड़ में है और इस प्रकार सभी दृश्यों पर लागू होता है। यह निर्दिष्ट करता है कि सभी विचारों को _Layout.cshtml
उनके लेआउट पृष्ठ के लिए उपयोग करना चाहिए । लेआउट पृष्ठ में दो नेविगेशन लिंक होते हैं, प्रत्येक दृश्य के लिए एक। लिंक @Html.ActionLink()
पृष्ठ पर खुद को प्रस्तुत करने के लिए उपयोग करते हैं ।
अब मैंने jQuery जोड़ लिया है और इन लिंक्स को हाईजैक करना चाहता हूं और पृष्ठ पर अपनी सामग्री को गतिशील रूप से लोड करने के लिए अजाक्स का उपयोग करना चाहता हूं।
<script type="text/javascript">
$(function () {
$('#theLink').click(function () {
$.ajax({
url: $(this).attr('href'),
type: "GET",
success: function (response) {
$('#mainContent').html(response);
}
});
return false;
});
});
</script>
ऐसा करने के लिए मैं दो तरीके सोच सकता हूं, लेकिन मैं विशेष रूप से एक को पसंद नहीं करता हूं:
1) मैं संपूर्ण दृश्य की सामग्री ले सकता हूं और उन्हें आंशिक दृश्य में रख सकता हूं, फिर मुख्य दृश्य को आंशिक दृश्य के रूप में प्रस्तुत करता है जब यह प्रदान किया जाता है। इस तरह, Request.IsAjaxRequest()
नियंत्रक में उपयोग करते हुए , मैं अनुरोध या अजाक्स अनुरोध के आधार पर View()
वापस लौट सकता हूं PartialView()
या नहीं। मैं अजाक्स अनुरोध पर नियमित दृश्य नहीं लौटा सकता क्योंकि तब यह लेआउट पृष्ठ का उपयोग करेगा और मुझे इंजेक्ट किए गए लेआउट पृष्ठ की दूसरी प्रतिलिपि मिलेगी। हालाँकि, मुझे यह पसंद नहीं है क्योंकि यह मुझे @{Html.RenderPartial();}
मानक GET अनुरोधों के लिए उनके साथ खाली विचार बनाने के लिए मजबूर करता है।
public ActionResult Index()
{
if (Request.IsAjaxRequest())
return PartialView("partialView");
else
return View();
}
फिर Index.cshtml में ऐसा करें:
@{Html.RenderPartial("partialView");}
2) मैं _viewstart से लेआउट पदनाम को हटा सकता हूं और अनुरोध अजाक्स नहीं होने पर इसे मैन्युअल रूप से निर्दिष्ट कर सकता हूं:
public ActionResult Index()
{
if (Request.IsAjaxRequest())
return View(); // Return view with no master.
else
return View("Index", "_Layout"); // Return view with master.
}
क्या किसी के पास बेहतर सुझाव है? क्या इसके लेआउट पृष्ठ के बिना किसी दृश्य को वापस करने का कोई तरीका है? यह स्पष्ट रूप से कहना आसान होगा "यदि आपका लेआउट शामिल नहीं है" अगर यह एक अजाक्स अनुरोध है, तो यह स्पष्ट रूप से लेआउट को शामिल करने के लिए होगा यदि यह अजाक्स नहीं है।