আমি কীভাবে jquery ব্যবহার করে আংশিক দৃশ্য উপস্থাপন করব?
আমরা এর মতো আংশিক ভিউ রেন্ডার করতে পারি:
<% Html.RenderPartial("UserDetails"); %>
কীভাবে আমরা jquery ব্যবহার করে একই কাজ করতে পারি?
আমি কীভাবে jquery ব্যবহার করে আংশিক দৃশ্য উপস্থাপন করব?
আমরা এর মতো আংশিক ভিউ রেন্ডার করতে পারি:
<% Html.RenderPartial("UserDetails"); %>
কীভাবে আমরা jquery ব্যবহার করে একই কাজ করতে পারি?
উত্তর:
আপনি কেবল jQuery ব্যবহার করে আংশিক দৃশ্য সরবরাহ করতে পারবেন না। তবে আপনি এমন একটি পদ্ধতিতে (ক্রিয়া) কল করতে পারেন যা আপনার জন্য আংশিক দৃষ্টিভঙ্গি সরবরাহ করবে এবং jQuery / AJAX ব্যবহার করে পৃষ্ঠাটিতে যুক্ত করবে। নীচে, আমাদের একটি বাটন ক্লিক হ্যান্ডলার রয়েছে যা বোতামের কোনও ডেটা অ্যাট্রিবিউট থেকে ক্রিয়াকলাপের জন্য url লোড করে এবং আংশিক দৃশ্যে থাকা ডিআইভিকে আপডেট হওয়া সামগ্রীর সাথে প্রতিস্থাপনের জন্য একটি জিইটি অনুরোধ বন্ধ করে দেয়।
$('.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()
। ব্যবহারকারী বিবরণ আংশিক দেখুন
<div id="detailsDiv">
<!-- ...content... -->
</div>
আমি এটি করতে এজ্যাক্স লোড ব্যবহার করেছি:
$('#user_content').load('@Url.Action("UserDetails","User")');
UserDetails
কোনও ক্রিয়াকলাপের নাম, আংশিক দৃষ্টিভঙ্গি নয়, তাই না?
@Url.Action("ActionName","ControllerName", new { area = "AreaName" } )
পরিবর্তে করছেন Handcoding ।
@ উত্তর ফসন তার উত্তর দিয়ে দুলছেন।
তবে, আমি জেএস এবং একটি ছোট নিয়ামক চেকের মধ্যে উন্নতির পরামর্শ দেব improvement
যখন আমরা @Url
কোনও অ্যাকশন কল করতে সাহায্যকারী ব্যবহার করি তখন আমরা একটি বিন্যাসিত এইচটিএমএল পেতে যাচ্ছি। কন্টেন্টটি আপডেট করা ভাল ( .html
) প্রকৃত উপাদান ( .replaceWith
) নয়।
এ সম্পর্কে আরও: jQuery এর প্রতিস্থাপনের সাথে () এবং এইচটিএমএল () এর মধ্যে পার্থক্য কী?
$.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>
এটি আপনার @ এইচটিএমএলকে উপস্থাপন করে a
এবং এটিকে সমস্ত ভক্তিমূলক sjmansy করতে আপনি এই CSS ব্যবহার করে একটি ম্লান-ইফেক্ট যুক্ত করতে পারেন:
/* 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>
উপাদান।
আপনার কন্ট্রোলারে আপনাকে এমন একটি ক্রিয়া তৈরি করতে হবে যা "ইউজারডিটেলস" আংশিক দর্শন বা নিয়ন্ত্রণের রেন্ডারড ফলাফলকে দেয়। তারপরে রেন্ডার এইচটিএমএল প্রদর্শিত হওয়ার জন্য ক্রিয়াকে কল করতে কেবল jQuery থেকে একটি এইচটিপি গেট বা পোস্ট ব্যবহার করুন।
একই ফলাফল অর্জনের জন্য স্ট্যান্ডার্ড আজাক্স কল ব্যবহার করা
$.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);
}
আমি এটি এই মত করে।
$(document).ready(function(){
$("#yourid").click(function(){
$(this).load('@Url.Action("Details")');
});
});
বিশদ পদ্ধতি:
public IActionResult Details()
{
return PartialView("Your Partial View");
}
যদি আপনার একটি গতিশীল উত্পন্ন মান উল্লেখ করতে হয় তবে আপনি @ ইউআরএল-এর পরে কোয়েরি স্ট্রিং পরামিতিগুলি যুক্ত করতে পারেন like
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);
}