मैं jquery का उपयोग करके आंशिक दृश्य कैसे प्रस्तुत करूं?
हम इस तरह से आंशिक दृश्य प्रस्तुत कर सकते हैं:
<% Html.RenderPartial("UserDetails"); %>
हम jquery का उपयोग करके कैसे कर सकते हैं?
मैं jquery का उपयोग करके आंशिक दृश्य कैसे प्रस्तुत करूं?
हम इस तरह से आंशिक दृश्य प्रस्तुत कर सकते हैं:
<% Html.RenderPartial("UserDetails"); %>
हम jquery का उपयोग करके कैसे कर सकते हैं?
जवाबों:
आप केवल jQuery का उपयोग करके आंशिक दृश्य प्रस्तुत नहीं कर सकते। हालाँकि, आप एक विधि (क्रिया) को कॉल कर सकते हैं, जो आपके लिए आंशिक दृश्य प्रस्तुत करेगी और इसे jQuery / AJAX का उपयोग करके पृष्ठ में जोड़ेगी। नीचे, हमारे पास एक बटन क्लिक हैंडलर है जो बटन पर एक डेटा विशेषता से कार्रवाई के लिए url को लोड करता है और अद्यतन सामग्री के साथ आंशिक दृश्य में शामिल DIV को बदलने के लिए GET अनुरोध को बंद करता है।
$('.js-reload-details').on('click', function(evt) {
evt.preventDefault();
evt.stopPropagation();
var $detailDiv = $('#detailsDiv'),
url = $(this).data('url');
$.get(url, function(data) {
$detailDiv.replaceWith(data);
});
});
जहां उपयोगकर्ता नियंत्रक के पास विवरणों के नाम से एक क्रिया है:
public ActionResult Details( int id )
{
var model = ...get user from db using id...
return PartialView( "UserDetails", model );
}
यह मान रहा है कि आपका आंशिक दृश्य आईडी के साथ एक कंटेनर है detailsDiv
ताकि आप कॉल के परिणाम की सामग्री के साथ पूरी चीज को बदल दें।
पैरेंट व्यू बटन
<button data-url='@Url.Action("details","user", new { id = Model.ID } )'
class="js-reload-details">Reload</button>
User
नियंत्रक नाम है और details
कार्रवाई का नाम है @Url.Action()
। UserDetails आंशिक दृश्य
<div id="detailsDiv">
<!-- ...content... -->
</div>
मैंने ऐसा करने के लिए ajax लोड का उपयोग किया है:
$('#user_content').load('@Url.Action("UserDetails","User")');
UserDetails
एक क्रिया का नाम है, न कि आंशिक दृश्य, सही?
@Url.Action("ActionName","ControllerName", new { area = "AreaName" } )
बजाय कर Handcoding ।
उनके जवाब के साथ @tvanfosson चट्टानें।
हालाँकि, मैं js और एक छोटे नियंत्रक जाँच में सुधार का सुझाव दूंगा।
जब हम @Url
किसी कार्रवाई को कॉल करने के लिए सहायक का उपयोग करते हैं, तो हम एक स्वरूपित html प्राप्त करने जा रहे हैं। सामग्री को अपडेट करना बेहतर होगा ( .html
) वास्तविक तत्व ( .replaceWith
) नहीं।
इसके बारे में अधिक: jQuery के प्रतिस्थापन () और HTML () के बीच क्या अंतर है?
$.get( '@Url.Action("details","user", new { id = Model.ID } )', function(data) {
$('#detailsDiv').html(data);
});
यह पेड़ों में विशेष रूप से उपयोगी है, जहां सामग्री को कई बार बदला जा सकता है।
नियंत्रक पर हम आवश्यकता के आधार पर कार्रवाई का पुन: उपयोग कर सकते हैं:
public ActionResult Details( int id )
{
var model = GetFooModel();
if (Request.IsAjaxRequest())
{
return PartialView( "UserDetails", model );
}
return View(model);
}
एक और चीज आप आजमा सकते हैं (तवान्फोसन के जवाब के आधार पर) यह है:
<div class="renderaction fade-in"
data-actionurl="@Url.Action("details","user", new { id = Model.ID } )"></div>
और फिर आपके पेज के स्क्रिप्ट सेक्शन में:
<script type="text/javascript">
$(function () {
$(".renderaction").each(function (i, n) {
var $n = $(n),
url = $n.attr('data-actionurl'),
$this = $(this);
$.get(url, function (data) {
$this.html(data);
});
});
});
</script>
यह ajax का उपयोग करके आपके @ Html.RenderAction को रेंडर करता है।
और यह सब धूर्त sjmansy बनाने के लिए आप इस सीएसएस का उपयोग कर एक फीका प्रभाव जोड़ सकते हैं:
/* make keyframes that tell the start state and the end state of our object */
@-webkit-keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
@-moz-keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
@keyframes fadeIn { from { opacity:0; } to { opacity:1; } }
.fade-in {
opacity: 0; /* make things invisible upon start */
-webkit-animation: fadeIn ease-in 1; /* call our keyframe named fadeIn, use animattion ease-in and repeat it only 1 time */
-moz-animation: fadeIn ease-in 1;
-o-animation: fadeIn ease-in 1;
animation: fadeIn ease-in 1;
-webkit-animation-fill-mode: forwards; /* this makes sure that after animation is done we remain at the last keyframe value (opacity: 1)*/
-o-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-duration: 1s;
-moz-animation-duration: 1s;
-o-animation-duration: 1s;
animation-duration: 1s;
}
मैन आई एमवीएक्स :-)
<div class="renderaction fade-in" ...></div>
तत्व।
आपको अपने नियंत्रक पर एक एक्शन बनाने की आवश्यकता होगी जो "UserDetails" के आंशिक परिणाम या नियंत्रण को प्रदान करता है। तो बस प्रदर्शित करने के लिए प्रदान की गई HTML प्राप्त करने के लिए क्रिया को कॉल करने के लिए jQuery से एक Http Get या Post का उपयोग करें।
समान परिणाम प्राप्त करने के लिए मानक अजाक्स कॉल का उपयोग करना
$.ajax({
url: '@Url.Action("_SearchStudents")?NationalId=' + $('#NationalId').val(),
type: 'GET',
error: function (xhr) {
alert('Error: ' + xhr.statusText);
},
success: function (result) {
$('#divSearchResult').html(result);
}
});
public ActionResult _SearchStudents(string NationalId)
{
//.......
return PartialView("_SearchStudents", model);
}
यदि आपको गतिशील रूप से उत्पन्न मान का संदर्भ देने की आवश्यकता है तो आप @ URL.Action के बाद क्वेरी स्ट्रिंग पैरामीटर्स भी संलग्न कर सकते हैं:
var id = $(this).attr('id');
var value = $(this).attr('value');
$('#user_content').load('@Url.Action("UserDetails","User")?Param1=' + id + "&Param2=" + value);
public ActionResult Details( int id, string value )
{
var model = GetFooModel();
if (Request.IsAjaxRequest())
{
return PartialView( "UserDetails", model );
}
return View(model);
}