আপনি কখন অ্যাট্রিবিউটটি ব্যবহার করবেন ChildActionOnly
? কোনটি ChildAction
এবং কোন পরিস্থিতিতে আপনি এই বৈশিষ্ট্যটি ব্যবহার করে কোনও ক্রিয়া সীমাবদ্ধ রাখতে চান?
আপনি কখন অ্যাট্রিবিউটটি ব্যবহার করবেন ChildActionOnly
? কোনটি ChildAction
এবং কোন পরিস্থিতিতে আপনি এই বৈশিষ্ট্যটি ব্যবহার করে কোনও ক্রিয়া সীমাবদ্ধ রাখতে চান?
উত্তর:
ChildActionOnly
অ্যাট্রিবিউট নিশ্চিত করে যে একটি কর্ম পদ্ধতি একটি দৃশ্য মধ্যে থেকে মাত্র একটি শিশু পদ্ধতি হিসাবে বলা যায় না। একটি ক্রিয়া পদ্ধতিতে শিশু অ্যাকশন হিসাবে এই বৈশিষ্ট্যটি ব্যবহার করার দরকার নেই তবে ব্যবহারকারীর অনুরোধের ফলে ক্রিয়া পদ্ধতিগুলি রোধ করতে আমরা এই বৈশিষ্ট্যটি ব্যবহার করার প্রবণতা রাখি। একটি ক্রিয়া পদ্ধতি সংজ্ঞায়িত করার পরে, ক্রিয়াটি শুরু করা হলে আমাদের কী রেন্ডার হবে তা তৈরি করতে হবে। শিশু ক্রিয়াগুলি সাধারণত আংশিক দর্শনের সাথে যুক্ত হয় যদিও এটি বাধ্যতামূলক নয়।
[চাইল্ড অ্যাকশনঅনলি] ভিউ-তে কোডের মাধ্যমে সীমাবদ্ধ অ্যাক্সেসের অনুমতি দেওয়া হচ্ছে
নির্দিষ্ট পৃষ্ঠা URL এর জন্য রাজ্য তথ্য বাস্তবায়ন। উদাহরণ: পেমেন্ট পেজ ইউআরএল (কেবল একবার পরিশোধ করা) রেজার সিনট্যাক্স নির্দিষ্ট ক্রিয়াকে শর্তযুক্ত কল করতে দেয়
// example from Music Store // GET: /ShoppingCart/CartSummary [ChildActionOnly] public ActionResult CartSummary() { // your stuff } /ShoppingCart/CartSummary will return "The action 'CartSummary' is accessible only by a child request."
তাই আপনি কোনও নির্দিষ্ট নিয়ামকের কাছে সরাসরি জিইটি প্রতিরোধ করেন তবে কেবলমাত্র অন্য নিয়ামক / ক্রিয়া থেকে। সম্ভবত :_পরিষদ দেখা।
InvalidOperationException
চিহ্নিত পদ্ধতিটিকে যখন <ChildActionOnly>
ডাকা হয় তখন কীভাবে সেরা ধরা যায় ?
সঙ্গে [ChildActionOnly] অ্যাট্রিবিউট সটীক, একটি কর্ম পদ্ধতি শুধুমাত্র একটি দৃশ্য মধ্যে থেকে একটি শিশু পদ্ধতি হিসাবে বলা যায় না। এখানে [চাইল্ড অ্যাকশনঅনলি] এর একটি উদাহরণ । ।
দুটি ক্রিয়াকলাপ রয়েছে: সূচি () এবং মাইডেটটাইম () এবং এর সাথে সম্পর্কিত দর্শনগুলি: সূচিপত্র শ্যাশটিএমএল এবং মাইডেটটাইম.cshtml। এটি HomeController.cs
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "This is from Index()";
var model = DateTime.Now;
return View(model);
}
[ChildActionOnly]
public PartialViewResult MyDateTime()
{
ViewBag.Message = "This is from MyDateTime()";
var model = DateTime.Now;
return PartialView(model);
}
}
এখানে জন্য দর্শনযোগ্য Index.cshtml ।
@model DateTime
@{
ViewBag.Title = "Index";
}
<h2>
Index</h2>
<div>
This is the index view for Home : @Model.ToLongTimeString()
</div>
<div>
@Html.Action("MyDateTime") // Calling the partial view: MyDateTime().
</div>
<div>
@ViewBag.Message
</div>
এখানে MyDateTime.cshtml আংশিক দৃশ্য।
@model DateTime
<p>
This is the child action result: @Model.ToLongTimeString()
<br />
@ViewBag.Message
</p>
আপনি যদি অ্যাপ্লিকেশনটি চালনা করেন এবং এই অনুরোধটি http: // লোকালহোস্ট: 57803 / হোম / মাইডেটটাইম করেন ফলাফলটি এর মতো সার্ভার ত্রুটি হবে :
এর অর্থ আপনি সরাসরি আংশিক দৃশ্য কল করতে পারবেন না। তবে সূচক () ভিউয়ের মাধ্যমে এটি সূচী সূচক হিসাবে বলা যেতে পারে sh
@ এইচটিএমএল.এ্যাকশন ("মাইডেটটাইম") // আংশিক দৃশ্য কল করা হচ্ছে: মাইডেটটাইম ()।
যদি আপনি [চাইল্ড অ্যাকশনআলি] অপসারণ করেন এবং একই অনুরোধটি করুন: http: // লোকালহোস্ট: 57803 / হোম / মাইডেটটাইম এটি আপনাকে মাইডেটটাইম আংশিক দেখার ফলাফল পেতে দেয়:
This is the child action result. 12:53:31 PM
This is from MyDateTime()
NonAction
করেও অর্জন করা যেতে পারে , এতে কী তফাত আসে?
আপনি যদি আপনার RenderAction
কোনও দৃশ্যে সাধারণত আংশিক দৃশ্য রেন্ডার করতে ব্যবহার করেন তবে আপনি এটি ব্যবহার করবেন ।
এটির সাথে চিহ্নিত করার কারণ [ChildActionOnly]
হ'ল আপনার কন্ট্রোলার পদ্ধতিটি জনসাধারণের জন্য প্রয়োজন যাতে আপনি এটির সাথে কল করতে পারেন RenderAction
তবে আপনি চান না যে কেউ কোনও ইউআরএল (যেমন / নিয়ন্ত্রণকারী / সামারচিল্ড অ্যাকশন) এ নেভিগেট করতে সক্ষম হন এবং এর ফলাফলগুলি দেখুন that সরাসরি পদক্ষেপ।
RenderAction
পারেন
NonActionAttribute
বাস্তব প্রকল্পগুলির মতো অ্যাকশন পদ্ধতি চিহ্নিত করার সুবিধা কী হতে পারে ?
private
বা protected
। public
আপনি যদি নিয়ন্ত্রক পদ্ধতি তৈরি করতে চান তবে আপনি সরাসরি বা মাধ্যমে সরাসরি কল করতে সক্ষম হতে চাইলে কোনও সত্য কারণ আমি সত্যিই ভাবতে পারি নাRenderAction
পার্টিতে একটু দেরি হলেও, ...
অন্যান্য উত্তরগুলি [ChildActionOnly]
বৈশিষ্ট্যটির কী প্রভাব ফেলে তা ব্যাখ্যা করার একটি ভাল কাজ করে । যাইহোক, বেশিরভাগ উদাহরণে, আমি নিজেকে জিজ্ঞাসা করতে থাকি কেন আমি কেবলমাত্র একটি দৃশ্যের আংশিক দৃষ্টিভঙ্গি দেওয়ার জন্য কেন একটি নতুন ক্রিয়াকলাপ তৈরি করব, যখন আপনি কেবল @Html.Partial("_MyParialView")
দৃশ্যে সরাসরি রেন্ডার করতে পারেন । মনে হচ্ছিল একটি অপ্রয়োজনীয় স্তরের মতো। যাইহোক, আমি তদন্ত হিসাবে, আমি দেখতে পেলাম যে একটি সুবিধা হ'ল শিশু ক্রিয়া একটি ভিন্ন মডেল তৈরি করতে পারে এবং আংশিক দৃষ্টিভঙ্গিতে এটি প্রেরণ করতে পারে। আংশিক দর্শনের জন্য প্রয়োজনীয় মডেলটি যে দৃশ্যে আংশিক দৃশ্যটি রেন্ডার করা হচ্ছে সেই মডেলটিতে উপলব্ধ নাও হতে পারে। কেবলমাত্র আংশিক দৃষ্টিভঙ্গি সরবরাহ করার জন্য প্রয়োজনীয় বস্তু / বৈশিষ্ট্যগুলি পেতে মডেল কাঠামোটি পরিবর্তনের পরিবর্তে, আপনি শিশুটিকে ক্রিয়া করতে পারেন এবং আংশিক দৃষ্টির জন্য প্রয়োজনীয় মডেলটি তৈরি করার ব্যবস্থা নিতে ব্যবস্থাটি গ্রহণ করতে পারেন।
এই উদাহরণস্বরূপ উপকারে আসা করতে পারেন, _Layout.cshtml
। আপনার যদি সমস্ত পৃষ্ঠায় কিছু বৈশিষ্ট্য সাধারণ থাকে তবে এটি সম্পাদন করার একটি উপায় হ'ল বেস ভিউ মডেল ব্যবহার করুন এবং অন্য সমস্ত ভিউ মডেলগুলি এর উত্তরাধিকার সূত্রে প্রাপ্ত। তারপরে, _Layout
বেসটি ভিউ মডেল এবং সাধারণ বৈশিষ্ট্যগুলি ব্যবহার করতে পারে। ডাউনসাইড (যা সাবজেক্টিভ) তা হ'ল যে সমস্ত সাধারণ বৈশিষ্ট্য সর্বদা উপলব্ধ থাকে তার গ্যারান্টি দিতে সমস্ত ভিউ মডেলগুলি অবশ্যই বেস ভিউ মডেল থেকে উত্তরাধিকারী হয়। বিকল্পটি @Html.Action
সেই সাধারণ জায়গাগুলিতে রেন্ডার করা । অ্যাকশন পদ্ধতিটি সমস্ত পৃষ্ঠাগুলির জন্য আংশিক দৃষ্টিতে সাধারণ দৃষ্টিভঙ্গির জন্য পৃথক একটি মডেল তৈরি করবে, যা "প্রধান" দর্শনের জন্য মডেলটিকে প্রভাবিত করবে না। এই বিকল্পে, _Layout
পৃষ্ঠাটির একটি মডেল থাকার দরকার নেই। এটি অনুসরণ করে যে অন্য সমস্ত ভিউ মডেলগুলিকে কোনও বেস ভিউ মডেল থেকে উত্তরাধিকারী হওয়ার দরকার নেই।
আমি নিশ্চিত যে [ChildActionOnly]
গুণটি ব্যবহার করার অন্যান্য কারণ রয়েছে তবে এটি আমার কাছে ভাল বলে মনে হচ্ছে, তাই আমি ভাবলাম আমি ভাগ করে নেব।
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.TempValue = "Index Action called at HomeController";
return View();
}
[ChildActionOnly]
public ActionResult ChildAction(string param)
{
ViewBag.Message = "Child Action called. " + param;
return View();
}
}
The code is initially invoking an Index action that in turn returns two Index views and at the View level it calls the ChildAction named “ChildAction”.
@{
ViewBag.Title = "Index";
}
<h2>
Index
</h2>
<!DOCTYPE html>
<html>
<head>
<title>Error</title>
</head>
<body>
<ul>
<li>
@ViewBag.TempValue
</li>
<li>@ViewBag.OnExceptionError</li>
@*<li>@{Html.RenderAction("ChildAction", new { param = "first" });}</li>@**@
@Html.Action("ChildAction", "Home", new { param = "first" })
</ul>
</body>
</html>
Copy and paste the code to see the result .thanks